32

威尔停止容器如果容器内运行的进程无法停止,则失败?如果我使用码头工人杀戮,是否可以保留容器内未保存的数据?

停止容器与相比耗时码头工人死亡? 我想关闭容器,但不丢失任何数据(没有高延迟来完成终止或停止进程)。

4个答案4

重置为默认值
37

行参考:

停止容器:停止正在运行的容器(发送SIGTERM,然后发送SIGKILL宽限期后)[…]容器内的主进程将收到SIGTERM,在宽限期后收到SIGKILL。[强调我的]

码头工人杀戮:终止正在运行的容器(发送SIGKILL或指定信号)[…]将发送容器内的主进程SIGKILL,或使用选项--signal指定的任何信号。[强调矿]

你可以从这篇文章中获得更多信息:两者的区别是什么停止容器码头工人杀戮?

13

Docker停止:当您发出docker停止命令时,会向该容器内的进程发送硬件信号。在docker stop的情况下,我们发送一条sig术语消息,它是终止信号的缩写,它是一条消息,进程将接收到该消息,告诉它基本上按自己的时间关闭。

SIGTERM公司当您想停止容器中的进程并关闭容器时,就可以使用它,您想给容器中的这个进程一点时间来关闭它自己并进行一些清理。

许多不同的编程语言都能让你在代码库中监听这些信号,一旦你收到信号,你就可以尝试进行一些清理,或者保存一些文件或发出一些消息或类似的东西。

在此处输入图像描述

另一方面docker kill命令问题是一个sig kill或kills信号,发送给容器内正在运行的主进程,因此kill本质上意味着您必须立即关闭,并且不需要做任何额外的工作。在此处输入图像描述

因此,理想情况下,我们总是使用docker stop命令停止容器,以便让正在运行的进程在其中有一点时间自行关闭,否则,如果感觉容器已锁定,而它没有响应docker stop命令,那么我们可以发出docker kill命令。

关于docker stop有一点奇怪或有趣的事情,当向容器发出docker stop10秒后容器没有自动停止时,docker会自动返回到发出docker kill命令。

所以,在docker站,基本上是我们表现得很好,但实际上只有10秒钟的时间关闭。

ping命令就是一个很好的例子。sudo docker运行busybox ping google.com现在,如果你想停止容器,如果你使用停靠站container_id,您将看到它需要10秒钟才能关闭,因为ping命令没有正确响应SIGTERM消息。换句话说,ping命令实际上没有能力说,哦,是的,我知道你想让我关机。

因此,在我们等待了10秒钟后,最终向它发送了杀戮信号,告诉它嘿,ping,你完成了,然后关机。

但如果你使用docker kill container_id你会看到它马上就死了。

8

你应该使用停止容器因为它会优雅地停止容器,就像关闭笔记本电脑一样,而不是像强行关闭笔记本电脑的电池一样杀死它们。

但是,Docker将在10秒钟内强制关闭(终止进程),以优雅地停止进程。

7

停止容器将发送SIGTERM公司(终止信号)发送给进程,Docker将有10秒钟的时间进行清理,比如保存文件或发出一些消息。

使用码头工人杀戮当容器被锁定时,如果它没有响应。

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.