docker - 在 docker 上启用实时恢复并不能保持容器存活
问题描述
我阅读了Enable Live Restore,但是当我尝试时。
ubuntu@ip-10-0-0-230:~$ cat /etc/docker/daemon.json
{
"live-restore": true
}
我以分离模式启动了一个 nginx 容器。
sudo docker run -d nginx
c73a20d1bb620e2180bc1fad7d10acb402c89fed9846f06471d6ef5860f76fb5
$sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
c73a20d1bb62 nginx "nginx -g 'daemon of…" 5 seconds ago Up 4
seconds
然后我停止了 dockerd
sudo systemctl stop snap.docker.dockerd.service
我检查了没有容器在运行
ps aux | grep nginx
之后,我重新启动了 docker 服务,但仍然没有任何容器。
任何想法?这个“启用实时恢复”是如何工作的?
解决方案
从文档中,修改daemon.json
(添加"live-restore": true
)后,您需要:
重新启动 Docker 守护程序。在 Linux 上,您可以通过重新加载 Docker 守护程序来避免重新启动(并避免容器停机)。如果您使用 systemd,则使用命令 systemctl reload docker。否则,向 dockerd 进程发送 SIGHUP 信号。
您也可以这样做,但不建议这样做:
如果您愿意,可以使用 --live-restore 标志手动启动 dockerd 进程。不推荐这种方法,因为它没有设置 systemd 或其他进程管理器在启动 Docker 进程时将使用的环境。这可能会导致意外行为。
看来您还没有完成这一步。你说你对 进行了修改daemon.json
,直接启动了一个容器,然后停止了dockerd
.
为了使Live Restore
功能正常工作,请按正确的顺序执行所有步骤:
daemon.json
通过添加修改"live-restore": true
使用以下命令重新加载 Docker 守护程序:
sudo systemctl reload docker
然后使用您的示例尝试该功能(启动容器并使守护程序不可用)。
我已经测试过,如果您按顺序执行以下步骤,它就可以工作:
测试Docker version 19.03.2, build 6a30dfc
和Ubuntu 19.10 (Eoan Ermine)
你已经通过snap安装了 Docker :snap.docker.dockerd.service
不幸的是,不建议这样做,因为snap 模型与 Docker 不完全兼容。此外,docker-snap不再由 Docker, Inc 维护。用户在通过 snap 安装 Docker 时会遇到一些问题,请参阅1 2
您应该通过以下命令删除 snap Docker 安装以避免任何潜在的重叠安装问题:
sudo snap remove docker --purge
然后以官方方式安装 Docker,然后Live Restore
按照上述步骤 尝试该功能。
重新启动守护程序时也要小心,文档说:
重启时实时恢复
如果守护程序选项(例如网桥 IP 地址和图形驱动程序)未更改,则实时恢复选项仅适用于恢复容器。如果这些守护程序级别的配置选项中的任何一个已更改,则实时恢复可能无法正常工作,您可能需要手动停止容器。
还有关于停机时间:
实时恢复对运行容器的影响
如果守护程序长时间关闭,运行的容器可能会填满守护程序通常读取的 FIFO 日志。完整的日志会阻止容器记录更多数据。默认缓冲区大小为 64K。如果缓冲区已满,您必须重新启动 Docker 守护程序以刷新它们。
在 Linux 上,您可以通过更改
/proc/sys/fs/pipe-max-size
.
推荐阅读
- pyqt4 - pyQt GUI使用python关闭当前窗口
- python-3.x - 保存 Python 对象
- android - 了解如何访问嵌入式安全元素
- javascript - 具有合并真实覆盖对象的firestore集
- go - 在生产者速度慢、消费者速度快的情况下,如何处理通道关闭同步?
- android - Unity Gradle 构建失败。DexException: 多个 dex 文件定义
- c - C 中的 std::array 等效项
- java - 可以转换 ArrayList
到数组列表 ? - c# - 具有 2 种不同类型的 TaskCompleteSource?
- mongodb - 如何在mongodb的所有文档中向子文档数组中添加一个字段?