全新Ubuntu安装后Docker任意模式下均无法连接网络
我之前也碰到过类似的Docker网络问题,给你几个实用的排查和解决方向,你可以一步步试试:
先检查主机的DNS配置
Docker默认会继承主机的DNS设置,如果主机本身的DNS服务器不可用,容器自然也无法解析域名。你可以先查看主机的DNS配置:cat /etc/resolv.conf如果里面的DNS地址(比如默认的systemd-resolved的127.0.0.53)在容器里无法访问,建议手动换成公共DNS,比如8.8.8.8、1.1.1.1。修改后记得重启systemd-resolved和Docker服务:
sudo systemctl restart systemd-resolved sudo systemctl restart docker排查防火墙规则干扰
Ubuntu默认的ufw防火墙有时候会阻止Docker的网络转发。你可以先临时关闭ufw测试一下:sudo ufw disable如果关闭后容器能正常联网,那就是ufw的规则问题。需要给Docker添加转发规则:编辑
/etc/ufw/after.rules文件,在末尾添加以下内容:# Docker网络转发规则 *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE COMMIT保存后重启ufw和Docker:
sudo ufw reload sudo systemctl restart docker强制给Docker配置公共DNS
有时候主机的DNS设置没被Docker正确继承,你可以直接在Docker daemon配置里指定DNS服务器。新建或编辑/etc/docker/daemon.json文件,写入:{ "dns": ["8.8.8.8", "8.8.4.4"] }然后重启Docker服务让配置生效:
sudo systemctl restart docker检查内核IP转发是否开启
Docker依赖内核的IP转发功能,如果这个功能没开,容器也无法联网。先查看当前状态:sysctl net.ipv4.ip_forward如果输出是
net.ipv4.ip_forward = 0,说明没开启,执行以下命令临时开启:sudo sysctl -w net.ipv4.ip_forward=1要让设置永久生效,编辑
/etc/sysctl.conf文件,添加或修改一行:net.ipv4.ip_forward=1保存后执行
sudo sysctl -p让配置立即生效。
备注:内容来源于stack exchange,提问作者Carson McNeil

