暂停与在Docker中停止

时间:2018-07-22 14:34:40

标签: docker restart docker-container pause

我试图了解命令docker stop ContainerIDdocker pause ContainerID之间的区别。根据{{​​3}},这两个都用于暂停现有的Docker容器。

4 个答案:

答案 0 :(得分:8)

docker pause命令挂起指定容器中的所有进程。在Linux上,这使用cgroups冷冻机。传统上,在挂起进程时会使用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恢复)来实现作业控制。

答案 1 :(得分:2)

以及之前添加的答案

docker events显示事件后运行docker stop

  • 杀死(信号15):其中信号15 =信号
  • 停止

docker events之后运行docker pause仅显示一个事件

  • 暂停

docker pause仍将在容器暂停时保留内存部分>恢复容器时将使用此内存。 docker stop释放容器停止后使用的内存。

This table包含更多详细信息。

答案 2 :(得分:1)

docker pause暂停(即发送SIGSTOP)暂停(读取:暂停)容器中所有进程。

docker stop停止(即,发送SIGTERM,并在需要时SIGKILL发送到conrainer的主要流程。

答案 3 :(得分:0)

向运行中的容器发出docker pause命令时,将传递SIGSTOP信号,该信号使容器内的进程(基本上是容器本身)处于暂停状态。 因此,当发出docker unpause指令时,SIGCONT信号将传递到容器进程以还原容器过程。

当向正在运行的容器发出docker stop命令时,SIGTERM信号将传递到容器进程以停止和停止容器。

因此,当向容器发出docker暂停,并且重新启动docker服务时,释放分配给它的cgroup。 (因为SIGTERM被传递到所有容器进程) 因此,重新启动后,由于容器已停止,因此取消暂停将无济于事。