温馨提示×

centos docker为何连不上网

小樊
46
2026-09-14 22:08:47
栏目: 智能运维

CentOS 上使用 Docker 容器连不上网,这是一个非常常见的问题,原因通常集中在 网络模式、防火墙、DNS、内核参数 这几个方面。下面我按最常见 → 较少见给你系统梳理一下,并给出对应解决办法。


一、最常见原因(80% 都在这里)

1️⃣ firewalld / iptables 拦截(CentOS 重灾区)

CentOS 默认启用 firewalld,容易把 Docker 的 NAT 规则干掉。

检查

systemctl status firewalld

解决办法(任选一种)

✅ 方案 A(推荐):让 Docker 和 firewalld 共存

firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --reload

✅ 方案 B(测试环境可用):关闭 firewalld

systemctl stop firewalld
systemctl disable firewalld

2️⃣ 容器没有网(docker0 没起来)

ip addr show docker0

如果没有 docker0 或没有 IP:

systemctl restart docker

3️⃣ DNS 解析失败(能 ping IP,不能 ping 域名)

容器内:

ping 8.8.8.8      # 通
ping www.baidu.com # 不通

解决 修改 /etc/docker/daemon.json

{
  "dns": ["8.8.8.8", "114.114.114.114"]
}

然后:

systemctl restart docker

二、Docker 网络模式问题

4️⃣ 使用了 --network=nonehost

docker run --network=none nginx
  • none → 完全无网
  • host → 直接用宿主机网络(可能受 CentOS 安全限制)

✅ 正常应:

docker run -it centos ping www.baidu.com

5️⃣ 自定义 bridge 网络配置错误

如果你用了:

docker network create mynet

但没开网关 / 子网冲突,也会没网。


三、CentOS 特有坑

6️⃣ 内核转发没开(云服务器常见)

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

7️⃣ SELinux 限制(CentOS 默认开启)

临时测试:

setenforce 0

永久(不推荐生产随便关):

sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

四、快速排查清单(照着做)

# 1. 宿主机能不能上网
ping www.baidu.com

# 2. docker0 在不在
ip addr | grep docker0

# 3. 容器能不能 ping IP
docker run --rm centos ping 8.8.8.8

# 4. DNS 是否可用
docker run --rm centos ping www.baidu.com

# 5. 防火墙
systemctl status firewalld

五、如果你愿意,我可以更精准帮你

你可以直接贴:

  • CentOS 版本(cat /etc/redhat-release
  • Docker 版本
  • 容器启动命令
  • docker runping 的结果

我可以直接告诉你 是哪一条导致的,并给你最小改动方案

0