暂停与停靠在码头工人

问题描述 投票:5回答:3

我试图了解命令docker stop ContainerIDdocker pause ContainerID之间的区别。根据this page,它们都用于暂停现有的Docker容器。

docker restart docker-container pause
3个回答
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使用pausing(及其对应的,通过SIGCONT恢复)来实现作业控制。


2
投票

除了之前添加的答案

docker events展示事件后运行docker stop

  • kill(信号15):信号15 = SIGTERM

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

  • 暂停

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

This table有更多细节。


1
投票

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

docker stop停止(即发送SIGTERM,如果需要SIGKILL)到conrainer [s]的主要过程。


0
投票

当使用docker pause命令发出运行容器时,传递SIGSTOP信号,该信号允许容器内的进程(基本上是容器本身)处于暂停状态。因此,当发布docker unpause时,SIGCONT信号将传递给容器进程以恢复容器进程。

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

因此,当向容器发出docker pause并重新启动docker服务时,将释放分配给它的cgroup。 (因为SIGTERM被传递给所有容器进程)因此,在重新启动之后,由于容器停止,因此取消暂停将没有用处。

© www.soinside.com 2019 - 2024. All rights reserved.