Ubuntu 上使用 Docker 连不上网,常见原因和排查思路如下(从最常见到较少见):
容器能 ping IP,但 ping 域名失败。
原因
8.8.8.8/etc/resolv.conf 配置异常解决
docker run --rm busybox ping -c 2 8.8.8.8
docker run --rm busybox ping -c 2 www.baidu.com
如果 IP 通、域名不通:
# 修改 Docker DNS
sudo vim /etc/docker/daemon.json
{
"dns": ["223.5.5.5", "114.114.114.114"]
}
sudo systemctl restart docker
Ubuntu 默认有 ufw,容易挡 Docker。
现象
解决
sudo ufw status
sudo ufw disable # 临时测试
或允许转发:
sudo ufw default allow routed
cat /proc/sys/net/ipv4/ip_forward
如果是 0:
sudo sysctl -w net.ipv4.ip_forward=1
永久生效:
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
ip addr show docker0
修复:
sudo systemctl stop docker
sudo ip link delete docker0
sudo systemctl start docker
docker run --network none nginx
→ 无网络
正确:
docker run --network bridge nginx
Docker 不自动继承代理。
sudo mkdir -p /etc/systemd/system/docker.service.d
[Service]
Environment="HTTP_PROXY=http://proxy:8080"
Environment="HTTPS_PROXY=http://proxy:8080"
sudo systemctl daemon-reexec
sudo systemctl restart docker
[ ] ping 8.8.8.8 是否通
[ ] ping 域名是否通
[ ] ip_forward 是否为 1
[ ] ufw 是否关闭
[ ] DNS 是否配置
[ ] 是否用了 --network none
如果你愿意,可以把下面信息发我,我可以直接帮你定位:
docker run 命令ubuntu 版本 + docker 版本