默认情况下,Docker 守护进程终止时,也会关闭正在运行的容器。你可以配置守护进程,使容器在守护进程不可用时仍然继续运行。这项功能称为 live restore(运行状态保留)。它有助于减少因守护进程崩溃、计划内停机或升级造成的容器停机时间。
注意:live restore 不支持 Windows 容器,但支持在 Docker Desktop for Windows 上运行的 Linux 容器。
启用 live restore
有两种方式可以启用 live restore,使容器在守护进程不可用时保持运行。以下方式只选择其中一种。
-
将配置加入守护进程配置文件。在 Linux 上,默认文件路径是
/etc/docker/daemon.json。使用 Docker Desktop for Mac 或 Docker Desktop for Windows 时,选择任务栏中的 Docker 图标,然后依次点击 Settings(设置) → Docker Engine。-
使用下面的 JSON 启用
live-restore。{ "live-restore": true } -
重启 Docker 守护进程。在 Linux 上,可以通过重新加载 Docker 守护进程配置来避免重启,从而避免容器停机。如果使用
systemd,请运行systemctl reload docker;否则,向dockerd进程发送SIGHUP信号。
-
-
也可以手动启动
dockerd进程,并传入--live-restore标志。不过不推荐这种方式,因为它不会建立由systemd或其他进程管理器启动 Docker 进程时所使用的环境,可能导致意外行为。
升级期间的 live restore
live restore 可以让容器在 Docker 守护进程更新期间保持运行,但只支持安装补丁版本(YY.MM.x)的情况,不支持守护进程的大版本(YY.MM)升级。
如果升级时跳过了中间版本,守护进程可能无法恢复与容器的连接。无法恢复连接时,它就不能管理这些仍在运行的容器,你必须手动停止它们。
重启后的 live restore
只有桥接网络的 IP 地址、graph driver(存储驱动)等守护进程选项没有改变时,live restore 才能恢复对容器的连接与管理。如果这些守护进程级配置中的任意一项发生改变,live restore 就可能失效,此时可能需要手动停止容器。
live restore 对运行中容器的影响
如果守护进程长时间停机,仍在运行的容器可能会填满原本由守护进程读取的 FIFO 日志缓冲区。缓冲区满后,容器就会被阻塞,无法继续写入日志。默认缓冲区大小为 64K。如果缓冲区已满,就必须重启 Docker 守护进程来排空它们。
在 Linux 上,可以通过修改 /proc/sys/fs/pipe-max-size 来调整内核的缓冲区大小。在 Docker Desktop for Mac 或 Docker Desktop for Windows 上,无法修改这一缓冲区大小。
live restore 与 Swarm 模式
live restore 选项只适用于独立容器,不适用于 Swarm 服务。Swarm 服务由 Swarm 管理节点管理。管理节点不可用时,Swarm 服务仍会在工作节点上继续运行;只有在可用管理节点的数量足以维持法定多数(quorum)后,才能继续管理这些服务。











暂无评论内容