Docker live restore:守护进程停机时保持容器运行

默认情况下,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)后,才能继续管理这些服务。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容