Docker DinD环境下Curl DNS解析异常问题求助
Docker DinD环境下Curl DNS解析异常问题求助
大家好,我最近碰到一个很费解的问题,想请各位帮忙分析下原因:
我正在运行一个docker:20.10.7-dind容器,里面部署了一套多容器应用,包含一个backend容器和一个keycloak容器。
我进入backend容器后做了一系列测试,结果如下:
1. 查看DNS配置文件
back$ cat /etc/resolv.conf nameserver 127.0.0.11 options ndots:0
2. 查看名称服务切换配置
back$ cat /etc/nsswitch.conf hosts: files dns
3. DNS解析测试(nslookup & host)
这两个命令都能正确把keycloak.localhost解析到172.20.0.10:
back$ nslookup keycloak.localhost Server: 127.0.0.11 Address: 127.0.0.11#53 Non-authoritative answer: Name: keycloak.localhost Address: 172.20.0.10 back$ host keycloak.localhost keycloak.localhost has address 172.20.0.10
4. 端口连通性测试(nc)
nc命令也能成功连接到keycloak容器的443端口:
back$ nc keycloak.localhost 443 -vvv keycloak.localhost (172.20.0.10:443) open
问题所在:Curl解析异常
但是当我用curl访问https://keycloak.localhost时,它居然错误地把域名解析到了127.0.0.1,导致连接失败:
back$ curl https://keycloak.localhost -v * Trying 127.0.0.1:443... * connect to 127.0.0.1 port 443 failed: Connection refused * Trying [::1]:443... * Immediate connect fail for ::1: Address not available * Failed to connect to keycloak.localhost port 443 after 0 ms: Couldn't connect to server * Closing connection 0 curl: (7) Failed to connect to keycloak.localhost port 443 after 0 ms: Couldn't connect to server
临时解决方法
如果手动给curl指定解析规则(用--resolve参数),就能正常访问keycloak服务:
back$ curl https://keycloak.localhost -v --resolve keycloak.localhost:443:172.20.0.10 * Added keycloak.localhost:443:172.20.0.10 to DNS cache * Hostname keycloak.localhost was found in DNS cache % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 172.20.0.10:443... * Connected to keycloak.localhost (172.20.0.10) port 443 (#0) > GET / HTTP/2 > Host: keycloak.localhost > user-agent: curl/8.0.1 > accept: */* > < HTTP/2 200 ...
我实在搞不明白为什么curl会出现这种和其他工具不一致的DNS解析结果,有没有大佬能给点排查方向或者线索?非常感谢!
备注:内容来源于stack exchange,提问作者ERO
相关产品推荐
相关产品推荐

