在守护程序停机期间使容器保持活动状态

预计阅读时间:3分钟

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

笔记

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

启用实时还原

有两种方法可以启用实时还原设置,以在守护程序不可用时使容器保持活动状态。请仅执行以下一项

  • 将配置添加到守护程序配置文件。在Linux上,默认为/etc/docker/daemon.json。在Mac的Docker桌面或Windows的Docker桌面上,从任务栏中选择Docker图标,然后单击 首选项->守护程序->高级

    • 使用以下JSON启用live-restore

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

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

升级过程中的实时还原

实时还原允许您使容器在Docker守护程序更新之间保持运行,但是仅在安装修补程序版本(YY.MM.x)时才支持,而对于主要(YY.MM)守护程序升级则不支持。

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

重新启动后进行实时还原

仅当守护程序选项(例如网桥IP地址和图形驱动程序)未更改时,实时还原选项才可用于还原容器。如果这些守护程序级别的配置选项中的任何一个已更改,则实时还原可能无法正常工作,您可能需要手动停止容器。

实时还原对正在运行的容器的影响

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

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

实时还原和群集模式

实时还原选项仅适用于独立容器,不适用于群集服务。群集服务由群集管理器管理。如果群集管理器不可用,则群集服务将继续在工作程序节点上运行,但是只有在有足够的群集管理器可用于维持仲裁之前,才能对群集服务进行管理。

泊坞窗升级守护进程dockerd实时恢复daemonless容器