我应该使用哪一个? docker kill或docker stop?

时间:2015-02-05 08:37:48

标签: docker

如果在容器内运行的进程无法停止,docker stop会失败吗?如果我使用docker kill,则可以保留容器内未保存的数据。与docker stop相比,docker kill耗时{??}我想关闭容器但不丢失任何数据(没有高延迟来完成终止或停止进程)。

4 个答案:

答案 0 :(得分:13)

  

行参考:

     

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

     

docker kill:终止正在运行的容器(发送SIGKILL或指定   信号)[...]将发送容器内的主要过程   SIGKILL,或使用选项--signal指定的任何信号。 [强调我的]

您可以从以下帖子中获取更多信息:https://superuser.com/questions/756999/whats-the-difference-between-docker-stop-and-docker-kill

答案 1 :(得分:2)

您应该使用docker stop ,因为它可以正常停止容器-例如关闭笔记本电脑,而不是杀死它们-像从电池中强行关闭笔记本电脑一样。

但是,Docker将在10秒内正常停止它们之前强制关闭(杀死进程)。

答案 2 :(得分:2)

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

SIGTERM 用于任何时候您想停止容器内的进程并关闭容器,并且您想给里面的进程一点时间来关闭它自己并进行一些清理。

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

enter image description here

另一方面 docker kill 命令问题是对容器内主要运行进程的 sig kill 或 kills 信号,因此杀死它本质上意味着您必须立即关闭并且您这样做不能做任何额外的工作。 enter image description here

所以理想情况下,我们总是使用 docker stop 命令停止容器,以便让其中的运行进程有一点时间自行关闭,否则如果感觉容器已锁定并且没有响应docker stop 命令然后我们可以发出 docker kill 代替。

关于 docker stop 的一种奇怪或有趣的事情,当向容器发出 docker stop 并且如果容器没有在 10 秒内自动停止,那么 docker 将自动回退到发出 docker kill 命令。

>

所以基本上在 docker stop 是我们很好,但实际关闭只有 10 秒钟。

一个很好的例子是 ping 命令。 sudo docker run busybox ping google.com 现在如果你想停止容器,如果你使用 docker stop container_id,你会看到它需要 10 秒才能关闭,因为 ping 命令没有正确响应 SIGTERM 消息。换句话说,ping 命令真的没有能力说哦,是的,我明白你想让我关机。

因此,在我们等待了 10 秒后,最终向它发送了终止信号,告诉它嘿 ping 您已完成并关闭自己。

但是如果您使用 docker kill container_id,您会看到它立即死亡。

但是

答案 3 :(得分:1)

docker stop 将向过程发送SIGTERM(终止信号),而docker将有10秒的时间进行清理,例如保存文件或发出一些消息。

如果容器没有响应,请在容器锁定时使用docker kill