Docker的`docker0`设备反复死亡(`inet addr`消失)
我正在运行Docker version 1.4.1, build 5bc2ff8
在Ubuntu 14.04上Docker version 1.4.1, build 5bc2ff8
。 当我docker run
任何容器,几分钟后我的docker0
桥“死”,容器停止能够到达networking。 在连接死亡之前,运行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)
重新启动泊坞窗,例如sudo service docker restart
,使设备恢复 – 但所有的容器都死了,问题又重新开始。 我不能可靠地得到任何运行超过几分钟的时间。 不足以完成大多数项目的docker build
。
- 什么可能导致这个?
- 我如何诊断?
- 什么是可能的解决scheme?
谢谢!
更新:我可以可靠地触发这个docker0
-dropping行为,只需通过docker docker run -t -i ubuntu /bin/bash
启动一个容器,然后用ctrl-d
退出。 当我这样做,这是我在/var/log/syslog
看到的
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
我如何诊断?
当docker0
有一个IP地址,如果你不启动任何容器,它会消失吗? 如果在你启动一个容器之前它一直持续下去,那么我将首先查看Docker日志以及在启动容器时拖曳系统日志。
IP地址是否以设定的时间间隔(例如每N分钟)消失? 如果是这样,我会从cron
查找日志,看看是否有一些周期性的任务是负责任的。
你在运行NetworkManager吗? 禁用NetworkManager会使问题消失吗? 我使用NetworkManager在系统上运行Docker时没有问题,但是在我的configuration文件中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
在docker0
上不应该有任何dhclient
进程监听,这绝对是什么导致你的IP地址消失。 如果你没有在这个接口上显式地运行一个DHCP客户端,这确实表明NetworkManager实际上是在试图pipe理这个接口。 你说你禁用了NetworkManager,但是你确认这个过程已经停止了吗? 在docker0
上监听的dhclient
的父进程是什么? 如果你停止dhclient
进程,它会重新启动吗? 问题是否消失?
wcid
服务似乎确实是这个原因。 我发现在configuration中:
(/etc/wicd/manager-settings.conf):wired_interface = docker0
我改变了这个eth0
。
我忘记重新启动服务,但是当wicd
服务停止时,我的问题消失了。 上面的变化之后,我再次开始了,我没有更多的问题。
显然wicd
一些autoconfig问题?
为了让桥继续工作,您可以使用:
sudo ip addr add 172.17.0.1/24 dev docker0
桥会把IP拿回来。
我有这个完全相同的问题,根源是wicd
。 运行:
sudo service wicd stop sudo service docker restart
…应该做的伎俩。