暂停与停止 docker
pause vs stop in docker
我想了解命令 docker stop ContainerID
和 docker pause ContainerID
之间的区别。根据 this page 它们都用于暂停现有的 Docker 容器。
docker pause
暂停(即发送 SIGSTOP
)暂停(读取:暂停)容器中的所有进程[s]。
docker stop
停止(即发送 SIGTERM
,如果需要 SIGKILL
)到 conrainer[s] 的主进程。
docker pause
命令挂起指定容器中的所有进程。在 Linux 上,这使用了 cgroups freezer。传统上,当挂起进程时,使用 SIGSTOP 信号,被挂起的进程可以观察到该信号
https://docs.docker.com/engine/reference/commandline/pause/
docker stop
命令。容器内的主进程会收到SIGTERM,经过一段宽限期后,SIGKILL。
https://docs.docker.com/engine/reference/commandline/stop/#options
SIGTERM
是终止信号。默认行为是终止进程,但它也可以被捕获或忽略。目的是终止进程,优雅与否,但首先让它有机会清理。
SIGKILL
是终止信号。唯一的行为是立即终止进程。由于进程无法捕获信号,因此无法清理,因此这是不得已的信号。
SIGSTOP
是暂停信号。唯一的行为是暂停进程;信号不能被捕获或忽略。 shell 使用暂停(及其对应物,通过 SIGCONT 恢复)来实现作业控制。
以及对之前添加的答案的补充
运行 docker events
在 docker stop
显示事件后
- kill(信号 15):其中信号 15 = SIGTERM
- 死
- 停止
运行 docker events
在 docker pause
之后只显示一个事件
- 暂停
另外 docker pause
在容器暂停时仍会保留内存部分。恢复容器时使用此内存。 docker stop
释放容器停止后使用的内存。
This table 有更多细节。
当 运行 容器发出 docker 暂停命令时,SIGSTOP 信号被传递,允许容器内的进程(基本上是容器本身)处于暂停状态。
因此,当发出 docker unpause 时,SIGCONT 信号将传递给容器进程以恢复容器进程。
当向运行容器发出docker停止命令时,SIGTERM信号被传递给容器进程停止并停止容器。
因此,当 docker pause 被发送到一个容器,并且 docker 服务被重新启动时,分配给它的 cgroups 被释放。 (因为 SIGTERM 被传递给所有容器进程)
所以在重启后,unpause 不会有帮助,因为容器已停止。
我想了解命令 docker stop ContainerID
和 docker pause ContainerID
之间的区别。根据 this page 它们都用于暂停现有的 Docker 容器。
docker pause
暂停(即发送 SIGSTOP
)暂停(读取:暂停)容器中的所有进程[s]。
docker stop
停止(即发送 SIGTERM
,如果需要 SIGKILL
)到 conrainer[s] 的主进程。
docker pause
命令挂起指定容器中的所有进程。在 Linux 上,这使用了 cgroups freezer。传统上,当挂起进程时,使用 SIGSTOP 信号,被挂起的进程可以观察到该信号
https://docs.docker.com/engine/reference/commandline/pause/
docker stop
命令。容器内的主进程会收到SIGTERM,经过一段宽限期后,SIGKILL。
https://docs.docker.com/engine/reference/commandline/stop/#options
SIGTERM
是终止信号。默认行为是终止进程,但它也可以被捕获或忽略。目的是终止进程,优雅与否,但首先让它有机会清理。
SIGKILL
是终止信号。唯一的行为是立即终止进程。由于进程无法捕获信号,因此无法清理,因此这是不得已的信号。
SIGSTOP
是暂停信号。唯一的行为是暂停进程;信号不能被捕获或忽略。 shell 使用暂停(及其对应物,通过 SIGCONT 恢复)来实现作业控制。
以及对之前添加的答案的补充
运行 docker events
在 docker stop
显示事件后
- kill(信号 15):其中信号 15 = SIGTERM
- 死
- 停止
运行 docker events
在 docker pause
之后只显示一个事件
- 暂停
另外 docker pause
在容器暂停时仍会保留内存部分。恢复容器时使用此内存。 docker stop
释放容器停止后使用的内存。
This table 有更多细节。
当 运行 容器发出 docker 暂停命令时,SIGSTOP 信号被传递,允许容器内的进程(基本上是容器本身)处于暂停状态。 因此,当发出 docker unpause 时,SIGCONT 信号将传递给容器进程以恢复容器进程。
当向运行容器发出docker停止命令时,SIGTERM信号被传递给容器进程停止并停止容器。
因此,当 docker pause 被发送到一个容器,并且 docker 服务被重新启动时,分配给它的 cgroups 被释放。 (因为 SIGTERM 被传递给所有容器进程) 所以在重启后,unpause 不会有帮助,因为容器已停止。