在 CentOS 上使用 Docker 联网,通常分为 Docker 容器本身如何联网 和 宿主机(CentOS)网络是否正常 两部分。下面按常见场景系统说明。
Docker 安装后,默认就有几种网络模式:
docker network ls
常见网络:
bridge(默认)hostnone容器通过 NAT 上网,最常见。
docker run -it centos bash
在容器中测试:
ping -c 3 www.baidu.com
✅ 能 ping 通说明网络正常。
ping -c 3 www.baidu.com
如果宿主机都不通,容器一定不通。
systemctl status docker
重启 Docker(改网络后建议执行):
systemctl restart docker
现象
ping IP 通ping 域名 不通解决:指定 DNS
docker run -it --dns=8.8.8.8 centos bash
或全局配置 Docker DNS:
vim /etc/docker/daemon.json
{
"dns": ["8.8.8.8", "114.114.114.114"]
}
重启 Docker:
systemctl restart docker
CentOS 7/8 默认使用 firewalld
systemctl status firewalld
✅ 临时关闭测试:
systemctl stop firewalld
✅ 或放行 Docker 网络:
firewall-cmd --permanent --zone=trusted --add-interface=docker0
firewall-cmd --reload
检查 docker0:
ip addr show docker0
如果没有:
systemctl restart docker
docker run -it --network host centos bash
✅ 优点:网络性能最好
❌ 缺点:失去网络隔离
docker network create mynet
docker run -it --network mynet centos bash
容器之间可通过 容器名互通。
| 场景 | 建议 |
|---|---|
| 普通上网 | bridge(默认) |
| 性能要求高 | host |
| 多容器通信 | 自定义 bridge |
| DNS 不通 | 配置 DNS |
| 防火墙问题 | firewalld 放行 docker0 |
# 宿主网络
ping www.baidu.com
# Docker 状态
systemctl status docker
# 容器网络测试
docker run --rm alpine ping -c 3 www.baidu.com
# DNS 测试
cat /etc/resolv.conf
如果你愿意,可以告诉我:
我可以 精准定位你当前的网络问题。