GitLab Dind服务问题:嵌套容器中使用Docker遇域名解析异常
GitLab CI嵌套Docker调用问题解答
问题1:job容器中nc能连通docker服务,但host命令解析失败
在GitLab CI的job容器环境里,docker服务名的解析依赖Docker内置的DNS服务器(127.0.0.11),它会把服务名映射到对应的dind容器IP:
nc命令使用系统标准的域名解析接口,会优先读取容器/etc/resolv.conf里配置的DNS(默认包含127.0.0.11),所以能正确解析docker并建立连接。- 而
host工具(来自bind-tools)默认会直接调用外部公共DNS服务器,这些外部DNS无法识别GitLab CI内部的服务域名,自然解析失败。你可以执行host docker 127.0.0.11验证,指定Docker内置DNS就能正常解析出IP。
问题2:嵌套容器无法解析docker服务
你启动嵌套容器时用了--network "host"参数,这会让嵌套容器共享job容器的网络命名空间,但存在关键问题:
嵌套容器内部的127.0.0.11(Docker内置DNS地址)指向的是嵌套容器自身的localhost,而非job容器里的Docker DNS服务。当嵌套容器尝试解析docker服务名时,会向自身的127.0.0.11发请求,但这个DNS服务根本不存在,所以解析失败。
解决思路:
- 去掉
--network "host"参数,让嵌套容器使用默认bridge网络,这样它会继承job容器的DNS配置,能通过Docker内置DNS解析docker服务名。 - 或者手动指定
docker服务的IP映射,启动嵌套容器时添加--add-host docker:<dind-service-ip>参数(可以在job容器里先通过getent hosts docker获取dind服务的IP)。
内容的提问来源于stack exchange,提问作者ERO
相关产品推荐
相关产品推荐

