Docker 无法解析需要多个名称服务器的主机

Docker 无法解析需要多个名称服务器的主机

我正在运行一个 Docker 容器,它克隆一些 git 存储库并在其内部构建一个项目。

它从两个不同的存储库克隆代码:一个是公共的github.com,另一个是私有的my.companys.github.enterprise.net,只能通过 VPN 访问。

resolv.conf有 2 个名称服务器:一个用于公共服务,一个用于 VPN:

nameserver 8.8.8.8
nameserver 10.10.3.3

当我尝试克隆我的docker容器内的存储库时,它只能解析github.com存储库而无法解析my.companys.github.enterprise.net存储库。

如果我切换我的线条resolv.conf,那么它只能解析my.companys.github.enterprise.net而不能解析那些github.com

有没有办法让 Docker 使用两个不同的名称服务器来解析到存储库的两个链接,resolv.conf而不是仅仅尝试第一个?

答案1

您的困惑在于,nameserver中的条目/etc/resolv.conf被认为是等效的(即镜像,无论询问哪一个都会提供相同的答案)。如果一个名称服务器响应“不存在”,则解析代码已完成,它不会尝试其他名称服务器来寻找不同的答案。解析器代码位于 libc 中,非常简单。

解决此问题的最简单的方法是在 Docker 中运行本地名称服务器(绑定或者未绑定软件包)能够智能地了解公共名称空间和“平行宇宙”(即您的私有名称空间),通常使用转发或“存根”区域进行配置。Google 可以帮助您完成此设置。然后,只需在 中设置一个指向的nameserver条目即可。/etc/resolv.conf127.0.0.1

相关内容