温馨提示×

centos docker为何无法联网

小樊
48
2026-09-05 22:16:25
栏目: 智能运维

CentOS 上使用 Docker 容器无法联网,这是一个非常常见的问题,原因通常集中在 网络模式、防火墙、iptables、DNS、或宿主机网络配置。下面按最常见 → 较少见的顺序帮你排查。


一、最常见原因(90% 问题在这里)

1️⃣ 防火墙(firewalld)拦截

CentOS 默认启用 firewalld,会拦截 Docker 的 NAT 流量。

检查:

systemctl status firewalld

临时解决(测试用):

systemctl stop firewalld

永久解决(推荐):

systemctl disable firewalld

⚠️ 生产环境可保留 firewalld,但需放行 docker 网桥


2️⃣ Docker 的 iptables 被禁用

Docker 依赖 iptables 做 NAT。

检查:

docker info | grep iptables

如果看到:

WARNING: iptables disabled

解决: 编辑 /etc/docker/daemon.json

{
  "iptables": true
}

然后:

systemctl restart docker

3️⃣ DNS 配置问题(容器能 ping IP,但不能 ping 域名)

这是非常常见的“假断网”。

测试:

docker run --rm alpine ping 8.8.8.8
docker run --rm alpine ping www.baidu.com

如果 IP 通、域名不通 → DNS 问题

解决:

docker run --rm --dns=8.8.8.8 alpine ping www.baidu.com

或修改:

vim /etc/docker/daemon.json
{
  "dns": ["8.8.8.8", "114.114.114.114"]
}
systemctl restart docker

二、网络模式相关问题

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

docker run --network none nginx

→ 完全无网络

docker run --network host nginx

→ 直接用宿主机网络(某些场景会失败)

✅ 默认应使用:

docker run nginx

(bridge 模式)


5️⃣ 自定义 bridge 网络未配置网关

如果你自己建了网络:

docker network create mynet

但没指定网关,可能异常。

查看:

docker network inspect mynet

三、宿主机层面问题

6️⃣ 宿主机本身不能联网

ping 8.8.8.8

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


7️⃣ IPv4 转发未开启

Docker 需要 IP 转发:

cat /proc/sys/net/ipv4/ip_forward

如果是 0

echo 1 > /proc/sys/net/ipv4/ip_forward

永久:

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

8️⃣ SELinux 限制(CentOS 特有)

getenforce

如果是 Enforcing

setenforce 0

或:

vim /etc/selinux/config
SELINUX=disabled

四、快速自检清单 ✅

# 1. 宿主机网络
ping 8.8.8.8

# 2. Docker 服务
systemctl status docker

# 3. 容器测试
docker run --rm alpine ping 8.8.8.8
docker run --rm alpine ping www.baidu.com

# 4. 防火墙
systemctl status firewalld

# 5. iptables
iptables -L -n

五、如果你愿意,我可以进一步帮你

你可以直接贴出:

  1. cat /etc/os-release
  2. docker version
  3. docker run --rm alpine ping 8.8.8.8 的输出
  4. iptables -L -n 输出

我可以 精准定位是哪一步出问题,而不是泛泛而谈。

0