容器退出,即使它是使用-dit启动的

时间:2018-02-22 08:11:22

标签: docker

我已经了解到如果我希望一个容器保持活着,即使前台没有运行进程(基本上让bash在前台运行),我必须docker run -dit <image_name>

奇怪的是,我正在准确地启动容器,但它立即存在。

我做错了什么?

图片为this。 我使用docker run --name my_container -dit islandsound/vowpal_wabbit启动它,我希望它一直运行直到我停止它。

3 个答案:

答案 0 :(得分:1)

Docker容器总是要求进程在前台运行,否则容器将退出。没有任何选择会改变这种情况。

选项-dit控制Docker以及它如何设置进程,但它完全取决于Dockerfile中的ENTRYPOINTCMD(或者在命令行上覆盖) )控制图像是否保持运行。

  • -d将屏幕与容器分离,并允许其在后台运行。这并不会使容器中的进程保持运行。
  • -i保持标准输入打开,有时需要运行希望有人运行它并使用键盘等的进程。
  • -t为您的终端分配一个伪tty。

docker run -dit ubuntu是一种常用于运行bash等交互式外壳的图像的技巧,可让它们在后台运行,因此您可以attachexec内容。

the image description开始,您似乎需要在运行映像时提供选项--daemon --foreground,以使进程保持在前台运行。

答案 1 :(得分:1)

图像有一个默认进程(入口点),这就是你需要使用的原因:

location / {
      try_files $uri $uri/ /index.php?$query_string;
}

(否则,您最后会使用docker run --rm --name my_container -it --entrypoint "/bin/bash" islandsound/vowpal_wabbit 命令一样使用-it。)

此外,如果您想要一个交互式会话,通常不会使用/bin/bash(在后台运行容器)。

答案 2 :(得分:0)

我想完成马特的优秀答案。将Docker容器视为Linux进程,因为实际上就是这种方式。通过执行docker run ...,您将启动Docker进程。如果它退出(或作为deamon开始在后台工作),则容器停止。该过程需要运行(在前台)才能使容器运行起来,这很简单。