接口调用时报域名无法解析,用 curl 访问同一地址却正常。日志里能对上时间点,这种反而好排。

容器内 DNS 配置缺失,或 Go 使用了 cgo 解析器读取了不同的解析配置。这一点先确认清楚,后面就不用反复试。

cat /etc/resolv.conf
// 关闭代理环境变量后再测
// 代码里指定解析器
net.DefaultResolver.PreferGo = true

「Go DNS 解析失败」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

处理上按这个顺序:确认容器 resolv.conf;排查是否走了错误的代理环境变量;固定使用纯 Go 解析器验证。

结果对不对很好判断,服务能正常解析域名并建立连接,请求返回 200。

作者 9823189