实时恢复
默认情况下,当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管理器可用以维持仲裁之前,无法对其进行管理。