如何在 Windows Server 重启后自动重启 Docker 容器?

如何在 Windows Server 重启后自动重启 Docker 容器?

过去几天,我一直在努力让我的 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 创建网络时,重启后创建的网络就会被删除

相关内容