为何Docker自定义桥接网络无法解析smtp.office365.com域名?
Docker自定义桥接网络下smtp.office365.com解析失败问题
现象描述
使用带有nslookup工具的Docker镜像(如tutum/dnsutils)执行以下命令,可正常解析smtp.office365.com的IP地址:
docker run -it --rm tutum/dnsutils nslookup smtp.office365.com
但创建自定义桥接网络testnet后,执行以下命令却提示无法找到该域名:
docker run -it --rm --net testnet tutum/dnsutils nslookup smtp.office365.com
而解析outlook.office365.com时,两种网络环境均能成功。当前使用的是WSL环境下的Docker,版本信息如下:
$ docker version Client: Docker Engine - Community Version: 20.10.21 API version: 1.41 Go version: go1.18.7 Git commit: baeda1f Built: Tue Oct 25 18:01:58 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.21 API version: 1.41 (minimum version 1.12) Go version: go1.18.7 Git commit: 3056208 Built: Tue Oct 25 17:59:49 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.12 GitCommit: a05d175400b1145e5e6a735a6710579d181e7fb0 runc: Version: 1.1.4 GitCommit: v1.1.4-0-g5fd4c4d docker-init: Version: 0.19.0 GitCommit: de40ad0
原因分析
核心差异来自Docker默认桥接网络与自定义桥接网络的DNS配置逻辑:
- 默认bridge网络:直接复用宿主机的DNS配置,容器使用和宿主机完全一致的DNS服务器进行解析,因此能正常处理
smtp.office365.com的DNS记录 - 自定义桥接网络:默认启用Docker内置的DNS服务器(地址为
127.0.0.11),该内置DNS在处理部分特殊域名时可能出现解析异常。smtp.office365.com的DNS记录可能包含多层CNAME跳转、特殊类型记录(如SRV),或者内置DNS的递归解析逻辑、缓存机制与宿主机DNS存在差异,导致无法完成解析 outlook.office365.com能正常解析,是因为它的DNS记录结构更简单,或者内置DNS可以正确处理其解析流程
验证方法
可以在自定义网络的容器中手动指定宿主机DNS进行测试,确认是否为内置DNS的问题:
# 替换<宿主机DNS>为实际宿主机使用的DNS地址(如8.8.8.8或宿主机网卡的DNS) docker run -it --rm --net testnet --dns <宿主机DNS> tutum/dnsutils nslookup smtp.office365.com
如果此命令能正常解析,即可确认是自定义网络默认使用的内置DNS导致的解析失败。
内容的提问来源于stack exchange,提问作者mehee
相关产品推荐
相关产品推荐

