Docker内置DNS功能突发故障,容器名访问失效求助
Docker容器名DNS解析故障排查
一直通过Docker容器名实现服务间访问(例如执行curl http://container_name),该方式正常运行数月后突发故障:Nginx无法转发http://container_name类请求,宿主机执行curl http://container_name也无法成功。
相关环境配置
1. Docker网络列表(docker network ls输出)
NETWORK ID NAME DRIVER SCOPE ecbfafa9fccf bridge bridge local b1aac67cfbfa myapp-api_default bridge local 5195101110d3 host host local d90ca5db218d none null local
2. 自定义网络详情(docker network inspect myapp-api_default输出)
[ { "Name": "myapp-api_default", "Id": "b1aac67cfbfa2923d5ae88a26e8729159f34e1ae083944e385a23047a7fc7237", "Created": "2022-09-28T18:21:57.202490009+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.22.0.0/16", "Gateway": "172.22.0.1" } ] }, "Internal": false, "Attachable": true, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "850c8c091467b7c92aedff5631869ab2f5603ae48ee4a1efb7f18f2f890154ff": { "Name": "app-boot-system-sample", "EndpointID": "1497a7ac8726646f24bf82400d69c56bbcacb689d4423ab54db15af586373179", "MacAddress": "02:42:ac:16:00:05", "IPv4Address": "172.22.0.5/16", "IPv6Address": "" }, "c819074103a5b108d21b836afd1c156036e13f523b44eb5002e13edf48d9f825": { "Name": "sample-tenant-pc", "EndpointID": "d4ef531762a117132cbd40dee729cdf2458061e2444d35fc7968411676329e7b", "MacAddress": "02:42:ac:16:00:04", "IPv4Address": "172.22.0.4/16", "IPv6Address": "" }, "d04e0c550c95da196844c160ca9b9f80f99e3536f92da55d6e9f18533a381802": { "Name": "sample-event-pc", "EndpointID": "71bb31e965df8f47cfcc32685594803496bf77ad396854b5dc57851467f99996", "MacAddress": "02:42:ac:16:00:07", "IPv4Address": "172.22.0.7/16", "IPv6Address": "" }, "ee6589ced2f5080b9f3641104262f430da8f37e1278f094f78a45e2414a607f4": { "Name": "app-boot-redis-sample", "EndpointID": "be41952c5709d7a843b9b2ce3276bd7ac8e951ab653ba478d3a8f7cf7fe9599a", "MacAddress": "02:42:ac:16:00:03", "IPv4Address": "172.22.0.3/16", "IPv6Address": "" }, "fd9196fc0fee67de364d6be37581e4fd9827b2983a332995269af78817828bbd": { "Name": "sample-org-pc", "EndpointID": "a0fd805ee5705533f58b7f0e3f1cbdb0a20abc1a01057bd23a2a5161d0c5181c", "MacAddress": "02:42:ac:16:00:02", "IPv4Address": "172.22.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": { "com.docker.compose.network": "myapp-api_default", "com.docker.compose.project": "myapp-api", "com.docker.compose.version": "1.26.2" } } ]
3. sample-tenant-pc的Docker Compose配置
version: '2.4' services: sample-tenant-pc: build: context: . restart: always container_name: sample-tenant-pc image: sample-tenant-pc ports: - 9001:80 networks: - myapp-api_default networks: myapp-api_default: external: false name: myapp-api_default
可能的故障原因及排查方向
1. Docker内置DNS服务异常
Docker依赖内置DNS服务处理容器名解析,若该服务崩溃或状态异常,会直接导致解析失败:
- 检查Docker守护进程状态:执行
systemctl status docker(Linux)或查看Docker Desktop运行状态(Windows/macOS) - 重启Docker服务:执行
systemctl restart docker,重启后验证容器名解析是否恢复
2. 自定义网络DNS注册失效
虽然网络配置显示容器已接入,但可能存在DNS缓存或注册信息异常:
- 重启所有关联容器:先停止容器,再重新启动,让容器重新向网络DNS注册自身信息
- 重建自定义网络:备份容器数据后,删除现有
myapp-api_default网络,再通过docker-compose重新创建网络并启动容器
3. 宿主机DNS配置冲突
宿主机无法解析容器名,说明宿主机DNS未指向Docker内置DNS:
- 检查Linux宿主机
/etc/resolv.conf,确认是否包含自定义网络网关(如172.22.0.1)作为DNS服务器 - 若使用systemd-resolved,需确保Docker网络的DNS规则被正确识别
4. 容器服务或网络接口异常
部分容器可能存在端口未监听、网络接口故障:
- 进入容器执行
netstat -tulpn,确认服务端口(如80)是否正常监听 - 用容器IP直接访问验证:例如
curl http://172.22.0.4,若能访问则是DNS解析问题;若不能则是容器服务本身故障
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

