实时恢复

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

笔记

Windows 容器不支持实时还原,但它适用于在 Windows 版 Docker Desktop 上运行的 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。否则, SIGHUPdockerd进程发送信号。

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

升级期间实时恢复

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

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

重启后实时恢复

仅当守护进程选项(例如桥接 IP 地址和图形驱动程序)未更改时,实时恢复选项才适用于恢复容器。如果这些守护程序级别配置选项中的任何一个发生更改,则实时恢复可能无法工作,并且您可能需要手动停止容器。

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

如果守护进程长时间关闭,运行的容器可能会填满守护进程通常读取的 FIFO 日志。完整的日志会阻止容器记录更多数据。默认缓冲区大小为 64K。如果缓冲区已满,则必须重新启动 Docker 守护程序才能刷新它们。

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

实时恢复和 Swarm 模式

实时恢复选项仅适用于独立容器,不适用于 Swarm 服务。 Swarm 服务由 Swarm 管理者管理。如果 Swarm 管理器不可用,Swarm 服务将继续在工作节点上运行,但在有足够的 Swarm 管理器可用于维持法定人数之前无法对其进行管理。