过去几天,我一直在努力让我的 Docker 容器在系统重启后重新启动。根据文档和有关该主题的众多博客,我的印象是,在我的 Docker run 命令中--restart always
使用 (或,取决于来源,--restart=always
或--restart=true
)应该足以实现这一点,但不幸的是,事实并非如此。
我目前正在进行不带实验功能的稳定频道安装(但已尝试了 Edge 频道和实验标志以及所有不同组合)。我的测试用例非常简单:
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart always -v \\.\pipe\docker_engine:\\.\pipe\docker_engine -v portainer_data:C:\data portainer/portainer
此时,我可以正常使用浏览器访问 Portainer。为了确保重启策略生效,我让容器运行了几分钟。但重启后,容器没有重新启动:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e7d6d80184d6 portainer/portainer "/portainer.exe" 44 seconds ago Exited (3221225786) 19 seconds ago portainer
检查容器,重启计数仍然为0:
docker inspect -f "{.RestartCount }}" portainer
0
我发现了一个页面,其中提到了 Docker 服务的依赖性问题,以及将 Windows 服务的启动类型更改为自动(延迟启动)的可能解决方案,但这对我来说也不起作用。Docker 守护进程日志仅在此部分提到了容器:
[21:46:33.465][WindowsDaemon ][Info ] Loading containers: start.
[21:46:33.468][WindowsDaemon ][Info ] debug: Loaded container e7d6d80184d663e96cf2e919edeaa92cc7c6ac31f2c7b326274a95aa7467e0a8, isRunning: false
[21:46:33.483][WindowsDaemon ][Info ] debug: restoring container [container=e7d6d80184d663e96cf2e919edeaa92cc7c6ac31f2c7b326274a95aa7467e0a8 running=false paused=false]
[21:46:33.484][WindowsDaemon ][Info ] debug: restore() [module=libcontainerd namespace=moby container=e7d6d80184d663e96cf2e919edeaa92cc7c6ac31f2c7b326274a95aa7467e0a8]
[21:46:33.484][WindowsDaemon ][Info ] debug: hcsshim::OpenComputeSystem - Begin Operation [cid=e7d6d80184d663e96cf2e919edeaa92cc7c6ac31f2c7b326274a95aa7467e0a8]
[21:46:33.484][WindowsDaemon ][Info ] debug: hcsshim::OpenComputeSystem - End Operation - Success [cid=e7d6d80184d663e96cf2e919edeaa92cc7c6ac31f2c7b326274a95aa7467e0a8]
[21:46:33.484][WindowsDaemon ][Error ] Failed to delete container e7d6d80184d663e96cf2e919edeaa92cc7c6ac31f2c7b326274a95aa7467e0a8 from containerd [error=no such container]
但我不知道这是否有帮助。
我的工作环境是这样的:
findstr /B /C:"OS Name" /C:"OS Version"`
OS Name: Microsoft Windows 10 Pro
OS Version: 10.0.18362 N/A Build 18362
注意:我也在 Windows Server 2019 安装上尝试过此操作。
docker --version
Docker version 19.03.1, build 74b1e89
我的Docker引擎版本是2.1.0.1
注意:我也尝试过 Edge 频道。
有谁能帮我解释一下这个问题?这看起来只是基本功能,我肯定遗漏了一点信息。非常感谢大家的帮助。
答案1
我在运行 Windows Server 2019 时遇到了同样的问题,我通过始终使用 docker run -d --restart 启动容器解决了该问题。
重新启动并重启服务或服务器后,容器恢复正常运行
问题是网络层已被删除并且没有被重新创建。
我找不到向 docker 配置添加持久网络的方法。
每次我用 docker network create -d nat 创建网络时,重启后创建的网络就会被删除