代码之家  ›  专栏  ›  技术社区  ›  ibodi

在docker中暂停与停止

  •  5
  • ibodi  · 技术社区  · 7 年前

    我想知道这些命令之间的区别 docker stop ContainerID docker pause ContainerID . 根据 this page 它们都用于暂停现有的DOCKER容器。

    3 回复  |  直到 6 年前
        1
  •  11
  •   Hemant Singh    7 年前

    这个 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恢复)来实现作业控制。

        2
  •  2
  •   faboulaws    6 年前

    加上前面的答案

    跑步 docker events 之后 docker stop 显示事件

    • kill(信号15):其中信号15=SIGTERM
    • 死亡
    • 停止

    跑步 docker事件 之后 docker pause 仅显示一个事件

    • 暂停

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

    This table 有更多的细节。

        3
  •  1
  •   Mureinik    7 年前

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

    docker stop 停止(即发送 SIGTERM ,如果需要 SIGKILL )对康雷纳的主要过程。

        4
  •  0
  •   Dr.Mr.Dr    6 年前

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

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

    因此,当对容器发出docker暂停,并重新启动docker服务时,将释放分配给它的cgroup(当SIGTERM传递给所有容器进程时) 因此,重新启动后,取消暂停将不会有帮助,因为容器已停止。