
我必须在一个容器中启动两个服务
我尝试了各种变化,并认为它应该是这个样子。但显然我遗漏了一些东西。容器立即存在!
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
这里有两点需要注意:
- 使用 时
ENTRYPOINT
,CMD
会附加到ENTRYPOINT
。您的当前Dockerfile
将运行dockCtrl start start
。这可能不是您想要的。 - dockCtrl 脚本似乎启动了服务然后退出,因此容器退出。您需要使用可以留在前台的程序(supervisord、runit 等)来启动它们。