请问docker stop
如果容器内运行的进程无法停止失败?如果我使用docker kill
,可以保留容器内未保存的数据.是docker stop
比较费时docker kill
?我想关闭容器但不丢失任何数据(没有高延迟来完成终止或停止进程).
nit*_*gar 15
行参考:
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
您应该使用它docker stop
,因为它会像关闭笔记本电脑一样优雅地停止容器\xe2\x80\x94,而不是像强行关闭笔记本电脑的电池一样杀死它们\xe2\x80\x94。
但是,当需要 10 秒才能正常停止进程时,Docker 将强制关闭(杀死进程)。
\nDocker stop: 当您发出 docker stop 命令时,一个硬件信号会发送到该容器内的进程。在 docker stop 的情况下,我们发送一个 sig term 消息,它是终止信号的缩写,它是一个消息,该消息将被进程接收,告诉它本质上是按自己的时间关闭。
SIGTERM用于任何时候您想停止容器内的进程并关闭容器,并且您想给里面的进程一点时间来关闭自身并进行一些清理。
许多不同的编程语言都有能力让你在你的代码库中监听这些信号,一旦你得到这个信号,你就可以尝试做一些清理或者保存一些文件或发出一些消息或类似的东西。
另一方面,docker kill 命令问题是对容器内主要运行进程的 sig kill 或 kills 信号,因此杀死它本质上意味着您必须立即关闭并且您不能做任何额外的工作。
因此,理想情况下,我们总是使用 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你会看到它立即死了。
但
归档时间: |
|
查看次数: |
3742 次 |
最近记录: |