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

  1. 什么可能导致这个?
  2. 我如何诊断?
  3. 什么是可能的解决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 

…应该做的伎俩。