我在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
型
5条答案
按热度按时间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时,一切都恢复正常了smdnsysy2#
我该如何诊断?
当
docker0
有一个ip地址时,如果你 * 不 * 启动任何容器,它会消失吗?如果它一直持续到你启动一个容器,我会在你启动一个容器时查看Docker日志和跟踪系统日志。IP地址是否以设定的时间间隔(例如,每隔N分钟)消失?如果是,我将查找
cron
的日志,看看是否是某个周期性任务造成的。您正在运行网络管理器吗?禁用NetworkManager是否会使问题消失?我在装有NetworkManager的系统上运行Docker,没有问题,但我在配置中设置了
no-auto-default=*
,这可能会对这类事情产生影响。更新
这是很可疑的:
字符串
不应该有任何
dhclient
进程在docker0
上侦听,这绝对是导致您的ip地址消失的原因。如果您没有在此接口上显式运行dhcp客户端,这实际上表明NetworkManager实际上正在尝试管理此接口。您说您禁用了NetworkManager,但您是否确认进程已停止?监听docker0
的dhclient
的父进程是什么?如果停止dhclient
进程,它是否会重新启动?问题是否会消失?2izufjch3#
wcid
服务似乎确实是原因。我在配置中发现:(/etc/wicd/manager-settings.conf):wired_interface = docker0
我把它改成了
eth0
。我忘记重新启动服务,但当
wicd
服务停止时,我的问题消失了。在上面的更改后,我再次启动它,我没有更多的问题。wicd
的autoconfig问题要使网桥重新工作,您可以使用用途:
字符串
网桥就能拿回IP地址
0tdrvxhp4#
我遇到了完全相同的问题,根本原因是
wicd
。运行:字符串
……应该可以了。
uajslkp65#
对于Ubuntu 22:简而言之:
sudo apt remove netscript-2.4
是的,这个解决方案相当于前面的,但前面的很难得到点。