在 Ubuntu 上使用 Docker 时“无法联网”是一个比较常见的问题,原因可能来自 宿主机网络、Docker 配置、防火墙、DNS 或代理 等。下面按常见原因逐一说明,并给出排查与解决方法。
docker run --rm busybox ping -c 3 8.8.8.8
容器中无法解析域名:
docker run --rm busybox nslookup google.com
编辑或创建:
sudo nano /etc/docker/daemon.json
{
"dns": ["8.8.8.8", "114.114.114.114"]
}
重启 Docker:
sudo systemctl restart docker
Ubuntu 默认使用 UFW,可能会阻止 Docker 的 NAT 转发。
sudo ufw status
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
或临时关闭测试:
sudo ufw disable
⚠️ 注意:Docker 依赖 iptables,不要手动清空 iptables。
查看网桥:
ip addr show docker0
如果不存在或被破坏:
sudo systemctl stop docker
sudo ip link delete docker0
sudo systemctl start docker
如果你在代理环境下:
mkdir -p ~/.docker
nano ~/.docker/config.json
{
"proxies": {
"default": {
"httpProxy": "http://proxy:port",
"httpsProxy": "http://proxy:port"
}
}
}
重启 Docker:
sudo systemctl restart docker
检查:
cat /proc/sys/net/ipv4/ip_forward
如果是 0:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
永久生效:
sudo sysctl -w net.ipv4.ip_forward=1
例如:
docker run --network none ...
应改为:
docker run --network bridge ...
先确认宿主机:
ping 8.8.8.8
如果宿主机都不通,Docker 一定不通。
❌ 容器里能 ping IP,但不能访问域名
✅ DNS 问题
❌ Could not resolve host
✅ daemon.json 没配 DNS
❌ connect: network is unreachable
✅ ip_forward 或网桥问题
如果你愿意,可以贴出:
docker versiondocker infocat /etc/docker/daemon.json我可以帮你精准定位是哪一类问题。