Docker网络DNS配置核心是保障容器同时高效解析内网服务名、内网域名和公网域名;推荐方式为自定义网络+内置DNS转发(127.0.0.11)并指定上游递归DNS,其次为daemon.json全局配置,最后为容器级--dns临时指定。

Docker 网络配置 DNS 解析服务器,核心目标不是单纯“加速”,而是让容器既能快速解析内网服务名(如 db、cache),又能可靠解析内网域名(如 auth.internal)和公网域名(如 baidu.com)。真正影响内网互联速度的,是 DNS 查询路径是否最短、是否命中本地缓存、以及上游 DNS 是否支持递归且响应快。
下面分三类实用方式说明,按推荐程度排序:
自定义网络 + 内置 DNS 转发(最推荐,兼顾服务发现与解析效率)
Docker 为自定义网络自动启用内置 DNS(地址固定为 127.0.0.11),它专为服务发现设计:能直接解析同网络容器名(如 web、redis)和 --network-alias 别名,毫秒级响应。
但它本身不递归查公网或私有域名——需你指定上游 DNS 做转发:
# 创建网络时绑定一个响应快、支持递归的内网 DNS(如公司 CoreDNS 或 dnsmasq) docker network create --dns 192.168.10.50 mynet # 启动容器加入该网络 docker run --network mynet --name web nginx docker run --network mynet --rm alpine nslookup redis # ✅ 解析成功(服务发现) docker run --network mynet --rm alpine nslookup auth.internal # ✅ 解析成功(内网域名) docker run --network mynet --rm alpine nslookup baidu.com # ✅ 解析成功(公网域名)
✅ 优势:
- 容器
/etc/resolv.conf固定写入nameserver 127.0.0.11,无配置漂移 - 所有同网容器共享同一套 DNS 行为,统一可控
- 内网服务名走本地解析,零延迟;其余请求由
192.168.10.50负责,避免跨网查询
⚠️ 注意:确保 192.168.10.50 支持递归查询,并能直连容器(不能是宿主机 127.0.0.1,除非用 host 模式)。
全局配置 daemon.json(适合统一策略环境)
若团队所有容器都应优先走内网 DNS,可设为默认:
// /etc/docker/daemon.json
{
"dns": ["192.168.10.50", "114.114.114.114"],
"dns-search": ["internal.company.com", "company.com"],
"dns-opts": ["timeout:2", "attempts:2"]
}执行 sudo systemctl restart docker 后,新建容器自动生效。
✅ 适合:CI/CD 流水线、测试集群、开发机统一环境
✅ 内网域名补全更快(如 mysql → mysql.internal.company.com)
⚠️ 已运行容器不受影响,且单容器 --dns 仍可覆盖
启动时用 --dns 指定(适合调试与临时场景)
快速验证某容器是否能连通内网 DNS:
docker run --dns 192.168.10.50 --dns-search internal.company.com -it alpine nslookup mysql
✅ 简单直接,优先级最高,完全绕过其他配置
⚠️ 不适合长期部署,易遗漏,难统一管理
不复杂但容易忽略


















