Ubuntu 16.04安装Docker导致内外网断开问题求助
这种笔记本装Docker断网、台式机却正常的情况我碰到过好几次,核心差异基本都在笔记本的网络硬件或系统配置上,给你梳理几个最可能的原因和排查方向:
无线网卡与docker0的路由冲突
笔记本大多依赖无线网卡联网,而台式机常用有线网卡。Docker默认创建docker0网桥时会添加一条默认路由,如果这条路由的优先级比无线网卡的默认网关更高,所有流量都会被导向docker0,直接导致断网。
排查方法:执行route -n查看路由表,对比笔记本和台式机的路由条目差异,重点看默认路由(Destination为0.0.0.0)的网关和接口。
解决思路:修改Docker守护进程配置,指定docker0的子网避免冲突。编辑/etc/docker/daemon.json(如果没有就新建),添加以下内容:{"bip": "192.168.200.1/24"}选一个和你当前无线网段不重叠的子网,然后重启Docker:
systemctl restart dockerNetworkManager对网桥的干扰
Ubuntu 16.04的NetworkManager在管理无线连接时,可能会自动修改网络配置,和Docker的网桥规则冲突。台式机如果用有线连接或者静态IP配置,NetworkManager的影响会小很多。
排查方法:临时停止NetworkManager服务:systemctl stop NetworkManager,再重启网络服务:systemctl restart networking,然后启动Docker测试网络是否恢复。
解决思路:如果测试有效,配置NetworkManager忽略docker0网桥。编辑/etc/NetworkManager/NetworkManager.conf,在[keyfile]段添加:unmanaged-devices=interface-name:docker0保存后重启NetworkManager:
systemctl restart NetworkManager无线网卡驱动的兼容性问题
部分笔记本的无线网卡驱动对网桥、虚拟网络这类配置支持不佳,而台式机的有线网卡驱动通常更稳定。比如某些Broadcom、Realtek的无线网卡在Ubuntu 16.04下容易出现这类问题。
排查方法:查看无线网卡型号:lspci | grep Network,搜索该型号是否有已知的Docker网络兼容性问题。
解决思路:尝试更换网卡驱动(比如用开源驱动代替闭源驱动),或者临时切换Docker的网络模式为host(牺牲容器网络隔离性,但能解决断网问题),启动容器时加参数:docker run --network host ...docker0网段与内网IP重叠
Docker默认给docker0分配的是172.17.0.1/16网段,如果你的笔记本连接的内网(比如家里或公司的路由器)正好使用了这个网段,会导致路由混乱,而台式机连接的内网网段不同所以没问题。
排查方法:执行ip addr show docker0查看docker0的IP段,再执行ip addr show wlan0(你的无线网卡名,可能是wlp2s0之类的)查看无线IP的网段,确认是否重叠。
解决思路:同样通过修改/etc/docker/daemon.json的bip参数,指定一个不重叠的子网。UFW防火墙规则冲突
Ubuntu 16.04默认的UFW防火墙可能在笔记本上有更严格的规则,拦截了docker0的网络流量,而台式机可能关闭了UFW或者规则更宽松。
排查方法:临时关闭UFW:ufw disable,然后重启Docker测试网络是否恢复。
解决思路:如果有效,添加允许docker0流量的UFW规则:ufw allow in on docker0 ufw allow out on docker0然后重新启用UFW:
ufw enable
内容的提问来源于stack exchange,提问作者dk_bot

