Docker的`docker0`设备重复死亡(`inet addr`消失)

pnwntuvh  于 11个月前  发布在  Docker
关注(0)|答案(5)|浏览(144)

我在Ubuntu 14.04上运行Docker version 1.4.1, build 5bc2ff8。当我docker run任何容器时,几分钟后我的docker0桥“死亡”,容器停止能够到达网络。在连接死亡之前,运行ifconfig报告一个docker0设备带有inet addr,如下所示:

docker0   Link encap:Ethernet  HWaddr 56:84:7a:fe:97:99  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          [... etc.]

字符串
但是在连接断开后,ifconfig显示ipv4地址已经消失:

docker0   Link encap:Ethernet  HWaddr 56:84:7a:fe:97:99 
          inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8116 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15995 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2444859 (2.4 MB)  TX bytes:17440729 (17.4 MB)


重新启动docker,例如使用sudo service docker restart,使设备恢复正常--但是我所有的容器都死了,问题又开始了。我不能可靠地让任何东西一次运行超过几分钟。对于大多数项目来说,甚至不足以完成docker build
1.是什么造成的?
1.我该如何诊断呢?
1.有哪些可能的解决方案?
谢谢你,谢谢
更新:我可以可靠地触发这个docker0-dropping行为,只需启动一个带有docker run -t -i ubuntu /bin/bash的容器,然后退出ctrl-d

myhost kernel:  docker0: port 1(veth80ddeaf) entered disabled state
myhost kernel:  device veth80ddeaf left promiscuous mode
myhost kernel:  docker0: port 1(veth80ddeaf) entered disabled state
'

myhost dhclient: Internet Systems Consortium DHCP Client 4.2.4
myhost dhclient: Copyright 2004-2012 Internet Systems Consortium.
myhost dhclient: All rights reserved.
myhost dhclient: For info, please visit https://www.isc.org/software/dhcp/
myhost dhclient: 
myhost dhclient: Listening on LPF/docker0/56:84:7a:fe:97:99
myhost dhclient: Sending on   LPF/docker0/56:84:7a:fe:97:99
myhost dhclient: Sending on   Socket/fallback
myhost kernel:  IPv6: ADDRCONF(NETDEV_UP): docker0: link is not ready


更新#2:失败的频率似乎取决于容器运行的时间。例如:

docker run -i -t  ubuntu   sleep 0
--> `docker0` "survives" ~100% of the time

docker run -i -t  ubuntu   sleep 1
--> `docker0` survives ~80% of the time

docker run -i -t  ubuntu   sleep 5
--> `docker0` survives ~0% of the time

f87krz0w

f87krz0w1#

我也遇到过类似的问题:每次我重启docker,docker0桥都会启动,然后,当我执行docker run hello-world并退出程序时,它就消失了。我无法让hello世界再次工作,因为docker0消失了。
所以我查了系统日志(通过gnome-system-log的系统日志)从一台电脑,其中Docker定期工作和PC我有这个问题,从hello world命令的日志有点不同的顺序,但在本质上是相同的。但这里的东西我注意到:在有问题的PC上,docker使用netscript处理网络接口,当我通过sudo apt remove netscript-2.4删除它并使用sudo systemctl restart docker重新启动docker时,一切都恢复正常了

smdnsysy

smdnsysy2#

我该如何诊断?
docker0有一个ip地址时,如果你 * 不 * 启动任何容器,它会消失吗?如果它一直持续到你启动一个容器,我会在你启动一个容器时查看Docker日志和跟踪系统日志。
IP地址是否以设定的时间间隔(例如,每隔N分钟)消失?如果是,我将查找cron的日志,看看是否是某个周期性任务造成的。
您正在运行网络管理器吗?禁用NetworkManager是否会使问题消失?我在装有NetworkManager的系统上运行Docker,没有问题,但我在配置中设置了no-auto-default=*,这可能会对这类事情产生影响。

更新

这是很可疑的:

myhost dhclient: Internet Systems Consortium DHCP Client 4.2.4
myhost dhclient: Copyright 2004-2012 Internet Systems Consortium.
myhost dhclient: All rights reserved.
myhost dhclient: For info, please visit https://www.isc.org/software/dhcp/
myhost dhclient: 
myhost dhclient: Listening on LPF/docker0/56:84:7a:fe:97:99
myhost dhclient: Sending on   LPF/docker0/56:84:7a:fe:97:99
myhost dhclient: Sending on   Socket/fallback

字符串
不应该有任何dhclient进程在docker0上侦听,这绝对是导致您的ip地址消失的原因。如果您没有在此接口上显式运行dhcp客户端,这实际上表明NetworkManager实际上正在尝试管理此接口。您说您禁用了NetworkManager,但您是否确认进程已停止?监听docker0dhclient的父进程是什么?如果停止dhclient进程,它是否会重新启动?问题是否会消失?

2izufjch

2izufjch3#

wcid服务似乎确实是原因。我在配置中发现:
(/etc/wicd/manager-settings.conf):wired_interface = docker0
我把它改成了eth0
我忘记重新启动服务,但当wicd服务停止时,我的问题消失了。在上面的更改后,我再次启动它,我没有更多的问题。
wicd的autoconfig问题
要使网桥重新工作,您可以使用用途:

sudo ip addr add 172.17.0.1/24 dev docker0

字符串
网桥就能拿回IP地址

0tdrvxhp

0tdrvxhp4#

我遇到了完全相同的问题,根本原因是wicd。运行:

sudo service wicd stop
sudo service docker restart

字符串
……应该可以了。

uajslkp6

uajslkp65#

对于Ubuntu 22:简而言之:sudo apt remove netscript-2.4
是的,这个解决方案相当于前面的,但前面的很难得到点。

相关问题