实时恢复

默认情况下,当Docker守护进程终止时,它会关闭正在运行的容器。 您可以配置守护进程,使其在不可用时保持容器继续运行。此功能称为实时恢复。实时恢复选项有助于减少因守护进程崩溃、计划内停机或升级而导致的容器停机时间。

注意

实时还原不支持 Windows 容器,但它适用于在 Docker Desktop for Windows 上运行的 Linux 容器。

启用实时恢复

有两种方法可以启用实时还原设置,以便在守护进程不可用时保持容器运行。请仅执行以下操作之一

  • 将配置添加到守护进程配置文件中。在 Linux 上,默认值为 /etc/docker/daemon.json。在 Docker Desktop for Mac 或 Docker Desktop for Windows 上,从任务栏中选择 Docker 图标,然后点击 设置 -> Docker Engine

    • 使用以下 JSON 启用 live-restore

      {
        "live-restore": true
      }
    • 重启 Docker 守护进程。在 Linux 上,您可以通过重新加载 Docker 守护进程来避免重启(并避免您的容器出现任何停机时间)。如果您使用 systemd,则使用命令 systemctl reload docker。否则,向 dockerd 进程发送 SIGHUP 信号。

  • 如果您愿意,可以使用 dockerd 标志手动启动 --live-restore 进程。这种方法不推荐,因为它不会设置 systemd 或其他进程管理器在启动 Docker 进程时会使用的环境。这可能会导致意外行为。

升级期间的实时恢复

Live restore 允许您在 Docker 守护进程更新期间保持容器运行,但仅在安装补丁版本(YY.MM.x)时受支持,不适用于主要(YY.MM)守护进程升级。

如果在升级过程中跳过某些版本,守护进程可能无法恢复与容器的连接。如果守护进程无法恢复连接,它将无法管理正在运行的容器,您必须手动停止它们。

重启时实时恢复

只有在守护进程选项(如网桥 IP 地址和图驱动)未更改的情况下,实时恢复选项才能恢复容器。如果这些守护进程级别的配置选项中的任何一个发生了更改,实时恢复可能无法工作,您可能需要手动停止容器。

实时恢复对运行中容器的影响

如果守护进程长时间停止运行,正在运行的容器可能会填满守护进程通常读取的 FIFO 日志。日志满了会阻止容器记录更多数据。默认缓冲区大小为 64K。如果缓冲区满了,您必须重新启动 Docker 守护进程以清空它们。

在 Linux 上,您可以通过修改 /proc/sys/fs/pipe-max-size 来更改内核的缓冲区大小。在 Mac 或 Windows 的 Docker Desktop 上,您无法修改缓冲区大小。

实时恢复和 Swarm 模式

The live restore 选项仅适用于独立容器,而不适用于 Swarm 服务。Swarm 服务由 Swarm 管理器管理。如果 Swarm 管理器 不可用,Swarm 服务将继续在工作节点上运行,但无法 被管理,直到有足够的 Swarm 管理器可用以维持法定人数。