启动服务后如何保持Docker容器运行?

我看过很多教程似乎都在做我想做的事情,但是由于某种原因,我的Docker容器退出了。基本上,我正在Docker容器内设置一个Web服务器和一些守护程序。我通过bash脚本(run-

all.sh在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容器的真正方法。

在设计Docker容器时,应该将其构建为仅运行 一个

进程(即,您应该为Nginx提供一个容器,为管理者或正在运行的应用提供一个容器);此外,该过程应在前台运行。

当进程本身退出时,容器将“退出”(在您的情况下,该进程就是您的bash脚本)。


但是,如果您 确实 需要(或想要)在Docker容器中运行多个服务,请考虑从“ Docker Base

Image”开始,该镜像runit用作伪初始化进程(runit在运行Nginx和Supervisor时将保持在线状态)在前台,而其他流程则在做他们的事情。

他们有大量的文档,因此您应该能够轻松轻松地实现您想做的事情。

以上是 启动服务后如何保持Docker容器运行? 的全部内容, 来源链接: utcz.com/qa/427306.html

回到顶部