标准答案
- 在容器内查看实际 resolv.conf、默认路由和 DNS 服务器,再用独立查询工具区分名称不存在、超时和返回错误。
- 容器内的服务名解析与外部域名解析可能走不同路径,不能用一个结果代表全部 DNS 能力。
- 大响应、UDP 被拦截、搜索域拼接和缓存都可能造成“有时成功、有时失败”。
- 修复要确认运行时网络配置、上游 resolver、TTL 和应用连接重试,避免在镜像内硬编码短期 DNS 地址。
题目解析
容器内 DNS 可能由 resolv.conf、运行时转发器、服务发现和上游 resolver 共同决定;宿主机 hosts 文件不一定会进入容器的命名空间。连接失败还可能来自 network mode、路由、iptables、网络策略或目标服务监听地址。
排查应在同一个容器网络和运行身份下执行 getent/dig、连接测试和协议请求,并对比宿主机结果。先把解析、TCP、TLS 和应用错误分层,避免用改 hosts 或重启网络这种无法解释因果的操作掩盖配置问题。
常见误区
- 误区:只修改宿主机 hosts 文件。改正:在容器实际命名空间检查 resolver 和服务发现,必要时修复运行时 DNS 配置。
- 误区:把 DNS 失败全部归因于应用。改正:区分解析器、网络、连接和应用协议层,并分别取证。