在docker上启用实时还原不是';不要让容器活着

在docker上启用实时还原不是';不要让容器活着,docker,ubuntu,service,snapcraft,docker-daemon,Docker,Ubuntu,Service,Snapcraft,Docker Daemon,我读了那本书,但当我试着读的时候 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 I

我读了那本书,但当我试着读的时候

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
然后我停下了码头

sudo systemctl stop snap.docker.dockerd.service
我检查了一下,没有集装箱在运行

ps aux | grep nginx
之后,我重新启动了docker服务,但仍然没有任何容器

有什么想法吗?“启用实时还原”是如何工作的?

在修改
守护程序.json
(添加
“实时还原”:true
)后,您需要:

重新启动Docker守护进程。在Linux上,可以通过重新加载Docker守护进程来避免重新启动(并避免容器的任何停机)。如果使用systemd,则使用命令systemctl reload docker。否则,向dockerd进程发送SIGHUP信号

您也可以这样做,但不建议这样做:

如果愿意,可以使用--live restore标志手动启动dockerd进程。不建议使用这种方法,因为它没有设置systemd或其他流程管理器在启动Docker流程时将使用的环境。这可能会导致意外行为

您似乎没有执行此步骤。您说您已经修改了
daemon.json
,直接启动了一个容器,然后停止了
dockerd

要使
实时还原
功能正常工作,请按正确顺序执行所有步骤:

  • 通过添加
    “实时还原”:true
  • 使用以下命令重新加载Docker守护程序

    sudo systemctl reload docker
    
  • 然后尝试您的示例中的功能(启动容器并使守护进程不可用)

    我已经测试过,如果您按照以下步骤进行操作,它就会正常工作:

    使用Docker 19.03.2版、内置6a30dfc和Ubuntu 19.10(Eoan Ermine)进行测试

    您已通过以下方式安装Docker:
    snap.Docker.dockerd.service

    不幸的是,不推荐使用,因为。此外,不再由Docker,Inc维护。用户通过snap-see安装Docker时遇到一些问题

    应通过以下命令删除snap Docker安装,以避免任何潜在的重叠安装问题:

    sudo snap remove docker --purge
    
    然后使用安装Docker,然后按照上述步骤尝试
    实时还原
    功能

    重新启动守护进程时也要小心,文档中说:

    重新启动后的实时恢复

    如果守护进程选项(如网桥IP地址和图形驱动程序)没有更改,则live restore选项仅适用于还原容器。如果这些守护程序级别的配置选项中的任何一个已更改,则实时还原可能无法工作,您可能需要手动停止容器

    关于停机时间:

    实时还原对正在运行的容器的影响

    如果守护进程长时间停机,运行的容器可能会填满守护进程通常读取的FIFO日志。完整日志会阻止容器记录更多数据。默认缓冲区大小为64K。如果缓冲区已满,则必须重新启动Docker守护进程以刷新缓冲区

    在Linux上,您可以通过更改
    /proc/sys/fs/pipe max size
    来修改内核的缓冲区大小


    谢谢,但请检查我的第二行。我已经读了所有的书documentation@Ashwani我添加了一个示例(按顺序遵循步骤),它可以正常工作。也许我们没有相同的环境。我已经安装了Docker。我注意到您有
    snap.docker.dockerd.service
    是否可以尝试正式安装?因为不再由Docker,Inc.维护。好的,Yann,我将尝试正式安装。谢谢。@Ashwani在通过正式方式安装Docker之前,您应该删除snap Docker安装,以避免任何潜在的重叠安装问题。(更多信息,请查看我的答案)