CentOS下Docker网络故障如何排查
导读:CentOS 下 Docker 网络故障排查手册 一、快速定位流程 明确症状与范围:是容器间不通、容器访问外网失败、宿主机访问容器端口不通,还是拉取镜像失败。 查看基础状态: 服务与版本:systemctl status docker、...
CentOS 下 Docker 网络故障排查手册
一、快速定位流程
- 明确症状与范围:是容器间不通、容器访问外网失败、宿主机访问容器端口不通,还是拉取镜像失败。
- 查看基础状态:
- 服务与版本:systemctl status docker、docker version
- 宿主机网络:ip addr、ip route、ss -tulpen
- Docker 网络:docker network ls、docker network inspect
- 容器侧连通性:
- 进入容器:docker exec -it sh
- 解析与路由:cat /etc/resolv.conf、ip route
- 目标测试:对同网段容器用ping < 容器IP> ;对外用curl -v https://registry-1.docker.io;必要时在宿主机抓包:tcpdump -i docker0
- 复现与最小化:用最小化镜像(如alpine)复现,排除应用层问题。
- 变更留痕:记录每一步的命令与输出,便于回溯。
二、常见症状与修复要点
- 容器间无法通过名称互通
- 原因:不在同一网络,或未使用支持自动服务发现的网络。
- 处理:
- 查看网络与端点:docker network inspect
- 连接网络:docker network connect < 容器名>
- 优先使用自定义 bridge 网络,容器名可直接解析。
- 容器无法访问外部网络
- 原因:宿主机防火墙/NAT 策略不当。
- 处理:
- 启用伪装(SNAT):firewall-cmd --permanent --add-masquerade & & firewall-cmd --reload
- 如使用 firewalld 严格分区,可将 docker0 与容器网段加入 trusted 区域并重载。
- 宿主机无法访问容器服务
- 原因:未做端口映射或服务未监听 0.0.0.0。
- 处理:
- 启动映射:docker run -p 8080:80 …
- 容器内确认监听:ss -ltnp | grep 80(应看到 0.0.0.0:80 而非 127.0.0.1:80)
- 拉取镜像失败(如 EOF/超时)
- 原因:网络不稳定、DNS 解析慢、境外仓库访问受限。
- 处理:
- 连通性测试:ping 8.8.8.8、curl -v https://registry-1.docker.io
- 配置国内镜像加速器(/etc/docker/daemon.json):
- 示例:
{
“registry-mirrors”: [
“https://docker.m.daocloud.io”,
“https://mirror.baidubce.com”,
“https://mirror.aliyuncs.com”
]
} - 重启 Docker:systemctl restart docker
- 示例:
- 容器 DNS 解析失败
- 处理:在 /etc/docker/daemon.json 中指定 DNS:
{ “dns”: [“8.8.8.8”, “8.8.4.4”] } ,重启 Docker 后重试。
- 处理:在 /etc/docker/daemon.json 中指定 DNS:
- 无法创建网络或网络冲突
- 处理:
- 查看报错与现有网络:docker network create 与 docker network inspect
- 解决子网冲突或删除重建:docker network rm & & docker network create
- 必要时重启 Docker 服务后再测。
- 处理:
三、防火墙与网络模式要点
- firewalld 与 Docker
- 容器出网通常需要启用 MASQUERADE:firewall-cmd --permanent --add-masquerade & & firewall-cmd --reload。
- 若采用区域隔离,可将 docker0 与常见 Docker 网段(如 172.17.0.0/16、172.18.0.0/16)加入 trusted 区域并重载,以避免被默认策略拦截。
- 网络模式选择
- bridge:默认模式,容器通过 docker0 互通,需端口映射对外暴露。
- host:与宿主机共享网络命名空间,性能好但隔离性差,端口直接占用宿主机。
- none:无网络,完全隔离。
- container:与指定容器共享网络命名空间。
- 自定义 bridge 网络支持容器名解析与服务发现,更适合多容器应用。
四、高效调试命令清单
- 宿主机侧
- 网络与转发:ip addr、ip route、ss -tulpen、sysctl net.ipv4.ip_forward
- 防火墙:systemctl status firewalld、firewall-cmd --list-all、必要时 firewall-cmd --list-rich-rules
- 抓包分析:tcpdump -i docker0 -nn host < 容器IP>
- Docker 侧
- 资源与网络:docker ps -a、docker logs 、docker network ls/inspect
- 连通性测试:
- 容器内:ping < 目标IP> 、curl -v http://< 目标>
- 快速网络诊断容器:docker run --rm -it --network alpine sh
- 外部连通性
- ping 8.8.8.8、curl -v https://registry-1.docker.io(定位是否为 DNS/出口问题)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS下Docker网络故障如何排查
本文地址: https://pptw.com/jishu/765320.html
