Docker容器内nslookup正常但ping/wget提示地址错误求助
问题描述
环境配置
- 一台DNS服务器,配置A记录
myhost1.mycompany->10.10.10.1 - Debian 11服务器
myhost2,安装Docker daemon(20.10.5),运行容器mycontainer1 myhost2的/etc/resolv.conf配置了私有DNS服务器,并设置search mycompany
主机myhost2测试结果
nslookup myhost1返回10.10.10.1ping myhost1可正常连通wget myhost1可正常工作wget google.com可正常工作
容器mycontainer1测试结果
nslookup myhost1返回10.10.10.1ping myhost1提示bad addresswget myhost1提示bad addresswget google.com可正常工作cat /etc/resolv.conf输出与myhost2上的该文件内容完全一致
用户疑问:nslookup查询正常,但ping、wget等应用无法解析IP,求排查思路。
排查思路
检查容器hosts文件
执行cat /etc/hosts查看容器内hosts文件,确认是否存在myhost1的错误映射条目。测试完全限定域名(FQDN)
在容器内尝试ping myhost1.mycompany和wget myhost1.mycompany,验证search域是否未被应用程序正确识别。测试系统解析库返回结果
执行getent hosts myhost1,对比该命令与nslookup的输出,确认系统解析库(如getaddrinfo)是否能正确解析域名。检查容器网络模式与Docker DNS配置
- 执行
docker inspect mycontainer1 | grep NetworkMode,查看容器使用的网络模式 - 检查
/etc/docker/daemon.json中的dns或dns-search参数,确认是否存在覆盖容器resolv.conf的配置
- 执行
对比依赖版本差异
查看容器内ping、wget的版本,以及glibc等解析依赖库的版本,对比主机对应版本,排查是否存在版本兼容性问题。使用其他解析工具验证
若容器内已安装,执行dig myhost1或host myhost1测试,进一步确认DNS解析的一致性,排除nslookup的特殊处理逻辑。检查安全策略限制
临时关闭容器的SELinux/AppArmor等安全策略,测试是否因权限限制导致解析失败。
内容的提问来源于stack exchange,提问作者edouard
相关产品推荐
相关产品推荐

