我应该使用哪一个? docker 杀死还是 docker 停止?
Which one should i use? docker kill or docker stop?
如果容器内的进程运行无法停止,docker stop
会失败吗??如果我使用docker kill
,是否可以保留容器内未保存的数据。与 docker kill
相比,docker stop
是否更耗时??我想关闭容器但不丢失任何数据(没有高延迟来完成终止或停止进程)。
Line reference:
docker stop
: Stop a running container (send SIGTERM, and then SIGKILL
after grace period) [...] The main process inside the container will
receive SIGTERM, and after a grace period, SIGKILL. [emphasis mine]
docker kill
: Kill a running container (send SIGKILL, or specified
signal) [...] The main process inside the container will be sent
SIGKILL, or any signal specified with option --signal. [emphasis mine]
您可以从此 post 获得更多信息:https://superuser.com/questions/756999/whats-the-difference-between-docker-stop-and-docker-kill
你应该使用 docker stop
因为它优雅地停止容器 - 就像关闭你的笔记本电脑,而不是杀死它们 - 就像强行关闭笔记本电脑的电池.
但是,Docker 将在需要 10 秒才能正常停止它们时强制关闭(终止进程)。
docker stop
将向进程发送 SIGTERM(终止信号),docker 将有 10 秒的时间进行清理,例如保存文件或发出一些消息。
当容器被锁定时,如果它没有响应,请使用 docker kill
。
Docker 停止:
当您发出 docker 停止命令时,硬件信号将发送到该容器内的进程。在 docker 停止的情况下,我们发送一个 sig term 消息,它是终止信号的缩写,它是一个将被进程接收的消息,告诉它本质上要在自己的时间关闭。
SIGTERM 用于任何时候你想停止容器内的进程并关闭容器,并且你想给里面的进程一点点是时候自行关闭并做一些清理工作了。
许多不同的编程语言都可以让您在代码库中侦听这些信号,一旦您收到该信号,您就可以尝试进行一些清理或保存一些文件或者发出一些消息或类似的东西。
另一方面 docker kill 命令问题是一个 sig kill 或 kills 信号到容器内的主要 运行ning 进程,所以kill it 本质上意味着你必须立即关闭并且你不能做任何额外的工作。
因此理想情况下,我们总是使用 docker 停止命令停止容器,以便让其中的 运行ning 进程有一点时间自行关闭,否则如果感觉就像容器已经锁定并且它没有响应 docker 停止命令那么我们可以发出 docker kill 相反。
关于 docker 停止的一种小奇怪或有趣的事情,当向容器发出 docker 停止时,如果容器在 10 秒内没有自动停止,那么 docker 是将自动退回到发出 docker kill 命令。
所以基本上在 docker 停止是我们很好,但只有 10 秒才能真正关闭。
ping 命令就是一个很好的例子。
sudo docker 运行 busybox ping google.com
现在如果你想停止容器,如果你使用 docker stop container_id,你会看到它需要 10 秒才能关闭,因为 ping 命令不正确响应 SIGTERM 消息。换句话说,ping 命令并不能说哦,是的,我知道你想让我关机。
所以在我们等待那 10 秒之后,最终向它发送了终止信号,告诉它嘿 ping 你已经完成并关闭自己。
但是如果你使用docker kill container_id你会发现它马上就死了。
如果容器内的进程运行无法停止,docker stop
会失败吗??如果我使用docker kill
,是否可以保留容器内未保存的数据。与 docker kill
相比,docker stop
是否更耗时??我想关闭容器但不丢失任何数据(没有高延迟来完成终止或停止进程)。
Line reference:
docker stop
: Stop a running container (send SIGTERM, and then SIGKILL after grace period) [...] The main process inside the container will receive SIGTERM, and after a grace period, SIGKILL. [emphasis mine]
docker kill
: Kill a running container (send SIGKILL, or specified signal) [...] The main process inside the container will be sent SIGKILL, or any signal specified with option --signal. [emphasis mine]
您可以从此 post 获得更多信息:https://superuser.com/questions/756999/whats-the-difference-between-docker-stop-and-docker-kill
你应该使用 docker stop
因为它优雅地停止容器 - 就像关闭你的笔记本电脑,而不是杀死它们 - 就像强行关闭笔记本电脑的电池.
但是,Docker 将在需要 10 秒才能正常停止它们时强制关闭(终止进程)。
docker stop
将向进程发送 SIGTERM(终止信号),docker 将有 10 秒的时间进行清理,例如保存文件或发出一些消息。
当容器被锁定时,如果它没有响应,请使用 docker kill
。
Docker 停止: 当您发出 docker 停止命令时,硬件信号将发送到该容器内的进程。在 docker 停止的情况下,我们发送一个 sig term 消息,它是终止信号的缩写,它是一个将被进程接收的消息,告诉它本质上要在自己的时间关闭。
SIGTERM 用于任何时候你想停止容器内的进程并关闭容器,并且你想给里面的进程一点点是时候自行关闭并做一些清理工作了。
许多不同的编程语言都可以让您在代码库中侦听这些信号,一旦您收到该信号,您就可以尝试进行一些清理或保存一些文件或者发出一些消息或类似的东西。
另一方面 docker kill 命令问题是一个 sig kill 或 kills 信号到容器内的主要 运行ning 进程,所以kill it 本质上意味着你必须立即关闭并且你不能做任何额外的工作。
因此理想情况下,我们总是使用 docker 停止命令停止容器,以便让其中的 运行ning 进程有一点时间自行关闭,否则如果感觉就像容器已经锁定并且它没有响应 docker 停止命令那么我们可以发出 docker kill 相反。
关于 docker 停止的一种小奇怪或有趣的事情,当向容器发出 docker 停止时,如果容器在 10 秒内没有自动停止,那么 docker 是将自动退回到发出 docker kill 命令。
所以基本上在 docker 停止是我们很好,但只有 10 秒才能真正关闭。
ping 命令就是一个很好的例子。 sudo docker 运行 busybox ping google.com 现在如果你想停止容器,如果你使用 docker stop container_id,你会看到它需要 10 秒才能关闭,因为 ping 命令不正确响应 SIGTERM 消息。换句话说,ping 命令并不能说哦,是的,我知道你想让我关机。
所以在我们等待那 10 秒之后,最终向它发送了终止信号,告诉它嘿 ping 你已经完成并关闭自己。
但是如果你使用docker kill container_id你会发现它马上就死了。