这个坑值得记一笔。容器里访问外部接口报找不到主机,宿主机解析同域名没有问题,重新构建镜像也没有改善。
排查方向其实有限,先把可能性排一排。容器使用的解析配置没有继承宿主机;自定义网络的解析服务配置错误;解析请求被防火墙拦截。
第一件事是看容器内的解析配置
docker exec -it 容器名 cat /etc/resolv.conf
接着在容器内直接测试解析
docker exec -it 容器名 getent hosts 域名
指定可用的解析地址启动
docker run --dns 223.5.5.5 镜像名
末了核对宿主机的解析配置
cat /etc/resolv.conf
这台环境是别人交接的,不少默认值被动过,只能一项项核。
怎么算真的好了,看的是同一批现象。容器内域名能正常解析,接口调用恢复,日志不再报找不到主机。
这里还有个坑。在编排文件里写死解析地址能救急,但宿主机换了网络就会失效;长期方案是保证网络插件配置正确。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。