实时恢复
默认情况下,当 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
信号。
如果您愿意,可以使用
--live-restore
标志手动启动dockerd
进程。这种方法不建议使用,因为它不会设置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 管理器可用以维持法定人数。