容器可以继续运行吗?

时间:2019-01-15 13:39:19

标签: docker docker-container docker-run

当入口点指定在后台运行命令时,为什么容器会退出? 例如。如果我运行docker run -d ubuntu bash -c "sleep 12000&",则容器退出。如果我运行docker run -d ubuntu bash -c "sleep 12000",则容器将继续运行。
后台的进程不足以保持容器运行吗?
为什么在后台或前景中运行的sleep会对此产生影响?

3 个答案:

答案 0 :(得分:1)

根据Docker的说法,容器应该在

时运行
  

容器的主进程(PID 1)正在运行

在您的情况下,主进程bash和容器“运行”直到该进程退出。

答案 1 :(得分:1)

正如葡萄建议的那样,条件是PID 1正在运行。

该容器设计为短命的,专门用于一项任务(微服务),该任务在前台以PID 1运行。背景当然对于诸如ssh之类的东西很有用,但是容器必须有一项主要工作。

大多数服务都可以在前台或后台运行(取消授权)

PS。如果必须保持容器处于活动状态,请使用tail -f /dev/null作为CMD

答案 2 :(得分:1)

一个简单的标准可能是:如果您在本地运行命令,并且该命令立即返回并给您一个shell提示,那么,如果您将该命令作为容器中的主进程运行,则该容器将立即退出。 / p>

通常的最佳做法是让容器运行某个进程(例如网络服务器)作为前台进程,并在该服务器退出容器时运行它。在理想的情况下,容器是完全自治的:一旦您docker run,它就可以在没有任何用户干预的情况下完成其工作。 (在此模型中,没有安装任何软件的纯Ubuntu容器仅sleep个,就没那么有趣了。)