You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Overlay网络无法解析容器名称问题求助

排查Overlay网络DNS解析失败的实用思路

我之前碰到过几乎一模一样的Overlay网络DNS故障,结合你的场景(两台配置完全一致的主机,一台正常一台解析失败),问题肯定不是Docker核心配置的锅,大概率是Swarm集群状态、主机网络栈或者Overlay底层组件的异常,下面是一步步的排查方向:

一、先确认Swarm节点的健康状态

虽然你说配置一致,但先排除Swarm集群的状态异常:

  • 执行docker node ls,检查故障节点的状态是不是Ready,有没有Down或者Unreachable的标记
  • 执行docker swarm inspect,对比正常节点的输出,看故障节点的NodeStatus.Addr是不是正确的主机IP,集群的ClusterID是否和正常节点一致
  • 如果故障节点是worker,重新获取join token:docker swarm join-token worker,确认节点的join参数没有过期或错误

二、验证Overlay网络依赖的端口连通性

Overlay网络需要主机间三个端口完全互通,这是最常见的故障点:

  • 先ping正常主机的Swarm节点IP,确认基础网络没问题
  • 用nc检查必备端口:
    # 检查Swarm管理端口(TCP)
    nc -zv 正常主机IP 2377
    # 检查节点发现端口(TCP/UDP)
    nc -zv 正常主机IP 7946
    nc -zv -u 正常主机IP 7946
    # 检查VXLAN隧道端口(UDP)
    nc -zv -u 正常主机IP 4789
    
  • 检查故障主机的防火墙(firewalld/iptables),确认这三个端口已经放行——毕竟问题是昨天才出现的,很可能是防火墙规则被更新了
  • 对比正常主机,检查故障主机是否存在docker_gwbridge和VXLAN虚拟网卡:ip link show | grep -E "(docker_gwbridge|vxlan)",如果缺失,说明Docker网络组件初始化失败

三、排查Docker内置DNS服务的状态

Overlay网络的DNS解析完全依赖Docker内置的DNS服务(127.0.0.11),重点检查这个服务:

  • 在故障主机的测试容器里执行cat /etc/resolv.conf,看nameserver是不是127.0.0.11,有没有被其他配置篡改
  • 直接指定Docker DNS查询:nslookup test.DNS.name 127.0.0.11,如果还是失败,说明内置DNS服务在故障主机上异常
  • 尝试重启Docker服务:systemctl restart docker,然后重新创建网络和测试容器——有时候Docker进程僵死会导致DNS服务失效
  • 查看Docker日志找报错:journalctl -u docker.service | grep -iE "dns|overlay|swarm",比如有没有“failed to initialize DNS server”或者“VXLAN tunnel setup failed”这类信息

四、检查Overlay网络的本地配置

虽然创建命令一致,但还是要确认故障主机的网络状态:

  • 执行docker network inspect test_network,对比正常主机的输出,看IPAM.Config子网是否一致,Containers里有没有测试容器的信息
  • 清理残留的异常网络:docker network prune,删除所有未使用的网络后重新创建test_network再测试
  • 极端情况:Docker网络本地数据库损坏,备份/var/lib/docker/network/files/local-kv.db后删除,然后重启Docker(注意:删除会丢失所有自定义网络,需要重新创建)

五、排查主机系统层面的异常

Docker严重依赖主机的网络栈,检查系统参数:

  • 对比正常主机的sysctl参数:
    # 必须开启IP转发
    sysctl net.ipv4.ip_forward
    # 建议开启bridge的iptables调用
    sysctl net.bridge.bridge-nf-call-iptables
    
  • 查看内核日志找硬件/驱动异常:dmesg | grep -iE "vxlan|docker|iptables",比如VXLAN模块加载失败或者iptables规则冲突
  • 检查时间同步:timedatectl status,如果故障主机和正常主机时间偏差过大,Swarm的Raft协议会出现同步问题,导致网络状态异常

补充测试:缩小故障范围

你可以先在故障主机上创建一个bridge网络测试:

docker network create test_bridge
docker run --rm -d --name test1 --network test_bridge nginx
docker run --rm -it --network test_bridge busybox ping test1

如果bridge网络的DNS解析正常,说明问题只局限在Overlay网络的Swarm相关组件上,能大幅缩小排查范围。

内容的提问来源于stack exchange,提问作者Johannes Gesenhues

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:34:16