温馨提示×

ubuntu docker为何无法联网

小樊
54
2026-09-04 11:35:34
栏目: 智能运维

在 Ubuntu 上使用 Docker 时“无法联网”是一个比较常见的问题,原因可能来自 宿主机网络、Docker 配置、防火墙、DNS 或代理 等。下面按常见原因逐一说明,并给出排查与解决方法。


一、先确认是“容器不能上网”还是“Docker 本身不能上网”

1. 测试容器网络

docker run --rm busybox ping -c 3 8.8.8.8
  • ✅ 能 ping 通 IP → 网络通,问题在 DNS
  • ❌ 不能 ping 通 IP → 网络层问题(下面看)

二、最常见原因与解决方法

1️⃣ DNS 配置问题(最常见)

容器中无法解析域名:

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

2️⃣ 防火墙(UFW / iptables)拦截

Ubuntu 默认使用 UFW,可能会阻止 Docker 的 NAT 转发。

检查

sudo ufw status

解决

sudo ufw allow 53/tcp
sudo ufw allow 53/udp

或临时关闭测试:

sudo ufw disable

⚠️ 注意:Docker 依赖 iptables,不要手动清空 iptables。


3️⃣ Docker 网桥(docker0)异常

查看网桥:

ip addr show docker0

如果不存在或被破坏:

sudo systemctl stop docker
sudo ip link delete docker0
sudo systemctl start docker

4️⃣ 使用了代理(公司/校园网)

如果你在代理环境下:

为 Docker 配置代理

mkdir -p ~/.docker
nano ~/.docker/config.json
{
  "proxies": {
    "default": {
      "httpProxy": "http://proxy:port",
      "httpsProxy": "http://proxy:port"
    }
  }
}

重启 Docker:

sudo systemctl restart docker

5️⃣ IPv4 转发未开启

检查:

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

6️⃣ 使用了错误的网络模式

例如:

docker run --network none ...

应改为:

docker run --network bridge ...

7️⃣ 宿主机本身无网络

先确认宿主机:

ping 8.8.8.8

如果宿主机都不通,Docker 一定不通。


三、快速排查清单(推荐顺序)

  1. 宿主机能否上网?
  2. 容器能否 ping IP?
  3. 容器能否解析 DNS?
  4. UFW / 防火墙是否开启?
  5. 是否使用代理?
  6. Docker 服务是否正常?

四、常见错误示例

❌ 容器里能 ping IP,但不能访问域名
✅ DNS 问题

❌ Could not resolve host
✅ daemon.json 没配 DNS

❌ connect: network is unreachable
✅ ip_forward 或网桥问题


如果你愿意,可以贴出:

  • docker version
  • docker info
  • 报错信息
  • cat /etc/docker/daemon.json

我可以帮你精准定位是哪一类问题。

0 踩