docker工人无法获得ENTRYPOINT和CMD的工作

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

我尝试了各种各样的变化,并认为这是它应该看起来的样子。 但显然我错过了一些东西。 容器马上存在!

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

我也读了,我不应该使用systemd /服务,直接尝试命令没有成功。 (请参阅未注释的命令)

build立和运行命令:

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

我可以使用dockCtrl bash来input容器,而不是-d并使用dockCtrl bash脚本。

dockerfile:

 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 

这里要注意两点:

  • 当使用ENTRYPOINTCMD被附加到ENTRYPOINT 。 您当前的Dockerfile将运行dockCtrl start start 。 这可能不是你想要的。
  • dockCtrl脚本似乎启动服务,然后退出,因此,容器退出。 你需要用一些可以留在前台的东西(supervisord,runit等等)来解雇他们。