docker 无法让 ENTRYPOINT 和 CMD 工作

docker 无法让 ENTRYPOINT 和 CMD 工作

我必须在一个容器中启动两个服务

我尝试了各种变化,并认为它应该是这个样子。但显然我遗漏了一些东西。容器立即存在!

CMD ["start"]
ENTRYPOINT ["/sbin/dockCtrl"]

我还读到我不应该使用 systemd / service 并尝试直接使用命令但没有成功。(参见未注释的命令)

构建并运行命令:

docker build -t robotamer/citadel citadel
docker run -d --name="citadel" --hostname="mail" 24fcf023c95e

-it bash我可以使用而不是进入容器并很好地-d使用bash 脚本。dockCtrl

docker文件:

FROM debian:testing
MAINTAINER RoboTamer <[email protected]>
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
    apt-get install -y citadel-suite nano rsync && \
    apt-get clean

ENV DEBIAN_FRONTEND interactive
EXPOSE 25/tcp 587/tcp 143/tcp 993/tcp 995/tcp 5222 2020/tcp 504/tcp
COPY dockCtrl /sbin/
CMD ["start"]
ENTRYPOINT ["dockCtrl", "start"]

dockCtrl (-rwxr-xr-x):

#!/bin/bash

if test $1 = "start"
then
    # exec /usr/sbin/citserver -d -x3 -lmail -t/dev/null
    # exec /usr/sbin/webcit -d -p80 -f -c
    service citadel start
    service webcit start
fi

if test $1 = "stop"
then
    service citadel stop
    service webcit stop
fi

if test $1 = "clean"
then
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
fi

答案1

这里有两点需要注意:

  • 使用 时ENTRYPOINTCMD会附加到ENTRYPOINT。您的当前Dockerfile将运行dockCtrl start start。这可能不是您想要的。
  • dockCtrl 脚本似乎启动了服务然后退出,因此容器退出。您需要使用可以留在前台的程序(supervisord、runit 等)来启动它们。

相关内容