首页主机资讯CentOS下Docker网络故障如何排查

CentOS下Docker网络故障如何排查

时间2025-12-06 00:19:03发布访客分类主机资讯浏览1119
导读:CentOS 下 Docker 网络故障排查手册 一、快速定位流程 明确症状与范围:是容器间不通、容器访问外网失败、宿主机访问容器端口不通,还是拉取镜像失败。 查看基础状态: 服务与版本:systemctl status docker、...

CentOS 下 Docker 网络故障排查手册

一、快速定位流程

  • 明确症状与范围:是容器间不通容器访问外网失败宿主机访问容器端口不通,还是拉取镜像失败
  • 查看基础状态:
    • 服务与版本:systemctl status dockerdocker version
    • 宿主机网络:ip addrip routess -tulpen
    • Docker 网络:docker network lsdocker network inspect
  • 容器侧连通性:
    • 进入容器:docker exec -it sh
    • 解析与路由:cat /etc/resolv.confip 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.8curl -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 后重试。
  • 无法创建网络或网络冲突
    • 处理:
      • 查看报错与现有网络:docker network create docker network inspect
      • 解决子网冲突或删除重建:docker network rm & & docker network create
      • 必要时重启 Docker 服务后再测。

三、防火墙与网络模式要点

  • firewalld 与 Docker
    • 容器出网通常需要启用 MASQUERADEfirewall-cmd --permanent --add-masquerade & & firewall-cmd --reload
    • 若采用区域隔离,可将 docker0 与常见 Docker 网段(如 172.17.0.0/16172.18.0.0/16)加入 trusted 区域并重载,以避免被默认策略拦截。
  • 网络模式选择
    • bridge:默认模式,容器通过 docker0 互通,需端口映射对外暴露。
    • host:与宿主机共享网络命名空间,性能好但隔离性差,端口直接占用宿主机。
    • none:无网络,完全隔离。
    • container:与指定容器共享网络命名空间。
    • 自定义 bridge 网络支持容器名解析与服务发现,更适合多容器应用。

四、高效调试命令清单

  • 宿主机侧
    • 网络与转发:ip addrip routess -tulpensysctl net.ipv4.ip_forward
    • 防火墙:systemctl status firewalldfirewall-cmd --list-all、必要时 firewall-cmd --list-rich-rules
    • 抓包分析:tcpdump -i docker0 -nn host < 容器IP>
  • Docker 侧
    • 资源与网络:docker ps -adocker logs docker network ls/inspect
    • 连通性测试:
      • 容器内:ping < 目标IP> curl -v http://< 目标>
      • 快速网络诊断容器:docker run --rm -it --network alpine sh
  • 外部连通性
    • ping 8.8.8.8curl -v https://registry-1.docker.io(定位是否为 DNS/出口问题)

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: CentOS下Docker网络故障如何排查
本文地址: https://pptw.com/jishu/765320.html
Docker在CentOS上的容器如何迁移 如何在CentOS上配置Docker镜像仓库

游客 回复需填写必要信息