我已经了解到如果我希望一个容器保持活着,即使前台没有运行进程(基本上让bash在前台运行),我必须docker run -dit <image_name>
。
奇怪的是,我正在准确地启动容器,但它立即存在。
我做错了什么?
图片为this。
我使用docker run --name my_container -dit islandsound/vowpal_wabbit
启动它,我希望它一直运行直到我停止它。
答案 0 :(得分:1)
Docker容器总是要求进程在前台运行,否则容器将退出。没有任何选择会改变这种情况。
选项-dit
控制Docker以及它如何设置进程,但它完全取决于Dockerfile中的ENTRYPOINT
和CMD
(或者在命令行上覆盖) )控制图像是否保持运行。
-d
将屏幕与容器分离,并允许其在后台运行。这并不会使容器中的进程保持运行。-i
保持标准输入打开,有时需要运行希望有人运行它并使用键盘等的进程。-t
为您的终端分配一个伪tty。 docker run -dit ubuntu
是一种常用于运行bash
等交互式外壳的图像的技巧,可让它们在后台运行,因此您可以attach
或exec
内容。
从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开始在后台工作),则容器停止。该过程需要运行(在前台)才能使容器运行起来,这很简单。