容器里访问内部域名报无法解析,宿主机上同样的命令却正常。日志里能对上时间点,这种反而好排。
容器继承了宿主机的解析配置但使用了不同的命名空间,内网 DNS 未传递进去。这一点先确认清楚,后面就不用反复试。
docker run --dns 10.0.0.2 ... # compose dns: - 10.0.0.2 # 验证 docker exec -it 容器名 cat /etc/resolv.conf
「Docker DNS 解析」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
处理上按这个顺序:启动时指定 DNS;编排文件统一配置;确认内网域名在容器网络中可达。
结果对不对很好判断,容器内能解析内部域名并成功建立连接。