Docker容器失去网络连接,直到重新启动容器。

3

我的一些Docker容器会定期失去Internet连接。对于某些容器,问题似乎根本不会发生;而对于其他容器,它会间歇性地发生,其中一些更容易受到影响。值得注意的是,主机服务器(运行Ubuntu的HP Proliant Gen 10机器)的Internet连接完全正常,并且为了恢复容器的Internet连接,我只需重启容器本身而不是整个Docker守护程序。这不是一个很大的问题,但确实很烦人。有任何解决此问题的想法吗?


你使用什么类型的Docker网络?你在主机上安装了SELinux或类似的工具吗? - Bastian Klein
我对Docker还比较新,不确定如何检查?我只是在Ubuntu Linux上安装了开箱即用的Docker,没有安装任何其他工具。 - Joachim Prinsloo
@BastianKlein,你还有什么建议可以提供吗?如先前所述,这是一个没有安装任何其他Docker工具(除了在自己的容器中运行的Portainer)的标准Docker安装。 - Joachim Prinsloo
你可以使用Docker的重启策略,了解更多信息请参考Docker重启概念 - Thakur Amit
如果您直接运行它,我建议您使用此标志“--restart=unless-stopped”。如果您正在使用docker-compose,在compose.yml文件中有一个“restart: unless-stopped”属性。 - Thakur Amit
3个回答

0
在我的情况下,我发现失去与其他容器连接的容器是因为OpenVPN连接超时了 - 然后OpenVPN重置,导致依赖于OpenVPN的其他容器丢失接口en0和tun0。我编写了一个简陋的脚本来查找这种异常情况。
interface=sudo docker ps | grep sonarr | awk '{print  $1 " bash"}' | xargs bash -c 'sudo docker exec $0 netstat' | awk '/(utun0:|en0)/ {print $1}'
if ["$interface" = ""]; then
    cd /volume1/docker; docker-compose stop; sleep 10; docker-compose start;
fi

0

这只是一个假设,你的Ubuntu构建是否在服务器上设置了静态IP地址?还是通过dhcpcd守护程序自动配置所有网络接口的DHCP?

可能是您的Ubuntu解决方案定期自动配置所有网络接口,并且动态IP地址的丢失导致容器失去Internet连接,因为它们可能已经缓存了主机IP地址。因此,当主机动态更新分配的IP地址时,Docker将无法连接。

如果是动态的,请建议设置静态IP并查看您的情况如何?

更新您的/etc/dhcp/dhclient.conf/etc/dhcpd.conf以添加静态IP


是的,静态IP已经分配给主机。 - Joachim Prinsloo

0

您可以使用Docker的重启策略,了解更多信息请参考Docker Restart Concept。如果您直接运行它,我建议您使用此标志--restart=unless-stopped。如果您正在使用docker-compose,在compose.yml文件中有一个restart: unless-stopped属性。


所有的 Docker 容器都使用 --restart=unless-stopped。除了 Portainer,它在安装时设置了 --restart=always。顺便说一下,我从来没有遇到过 Portainer 特别的问题。 - Joachim Prinsloo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接