我读了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服务,但我仍然没有任何容器。
任何想法?此启用实时还原如何工作?
从documentation,修改daemon.json
(添加"live-restore": true
)后,您需要:
重新启动Docker守护程序。在Linux上,您可以通过重新加载Docker守护程序来避免重启(并避免容器出现任何停机)。如果使用systemd,请使用命令systemctl reload docker。否则,将SIGHUP信号发送到dockerd进程。
您也可以这样做,但不建议这样做:
[如果愿意,可以使用--live-restore标志手动启动dockerd进程。不建议使用此方法,因为它没有设置启动Docker进程时systemd或其他进程管理器将使用的环境。这可能会导致意外行为。
似乎您没有完成此步骤。您说已经对daemon.json
进行了修改,并直接启动了一个容器,然后停止了dockerd
。
为了使Live Restore
功能正常工作,请按照正确的顺序执行所有步骤:
daemon.json
来修改"live-restore": true
sudo systemctl reload docker
然后在您的示例中尝试该功能(启动一个容器并使守护程序不可用)。
重新启动守护程序时也要小心,文档说::>
重启后实时还原
实时还原选项仅在守护程序选项(例如网桥IP地址和图形驱动程序)未更改的情况下才能还原容器。如果这些守护程序级别的配置选项中的任何一个已更改,则实时还原可能无法正常工作,您可能需要手动停止容器。
还有停机时间:
实时还原对正在运行的容器的影响
如果守护程序长时间关闭,正在运行的容器可能会填满该守护程序通常读取的FIFO日志。完整的日志会阻止容器记录更多数据。默认缓冲区大小为64K。如果缓冲区已满,则必须重新启动Docker守护程序以刷新它们。
[在Linux上,您可以通过更改
/proc/sys/fs/pipe-max-size
来修改内核的缓冲区大小。我已经测试过,如果您按顺序执行以下步骤,它将起作用:
用Docker version 19.03.2, build 6a30dfc
和Ubuntu 19.10 (Eoan Ermine)
测试