【发布时间】:2014-11-04 16:24:24
【问题描述】:
我看过一堆教程,它们似乎和我想做的事情一样,但由于某种原因,我的 Docker 容器退出了。基本上,我在 Docker 容器中设置了一个 Web 服务器和一些守护进程。我通过一个名为 run-all.sh 的 bash 脚本来完成最后一部分,我通过 Dockerfile 中的 CMD 运行该脚本。 run-all.sh 看起来像这样:
service supervisor start
service nginx start
我在 Dockerfile 中按如下方式启动它:
CMD ["sh", "/root/credentialize_and_run.sh"]
我可以看到,当我手动运行时(即使用 -i -t /bin/bash 进入映像),所有服务都正确启动,并且在我运行映像时一切看起来都正常运行,但是一旦完成启动我的进程,它就会退出。我希望这些进程无限期地运行,据我所知,容器必须继续运行才能发生这种情况。尽管如此,当我运行docker ps -a 时,我看到了:
➜ docker_test docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7706edc4189 some_name/some_repo:blah "sh /root/run-all.sh 8 minutes ago Exited (0) 8 minutes ago grave_jones
什么给了?为什么要退出?我知道我可以在我的 bash 脚本末尾放置一个 while 循环来保持它,但是阻止它退出的正确方法是什么?
【问题讨论】:
-
您是否将服务的端口暴露给外部(docker run 的-p 选项)? (当然这不会阻止他们退出)
-
我在 Dockerfile 中使用了 ENTRYPOINT,在 ENTRYPOINT(我的 init 脚本)中定义的脚本运行后,它出现在日志中,但我的容器似乎已退出。所以,我没有使用 ENTRYPOINT,而是使用 RUN 命令来运行脚本,并且容器仍在后台运行。
标签: docker