我在公司代理后面工作。由于实施了许多限制,因此在构建docker映像(主要是基于ubuntu的映像)时,我必须切换到公共网络。构建是在同一台计算机上执行的(因此,在同一台dns conf上)。
除了构建之外,我总是在此代理后面运行容器。该公司(确实)也有自己的dns。
不幸的是,我不了解如何以“正确的方式”将主机dns传递给容器,也不了解docker如何管理容器resolv.conf。
当我查看主机时,会看到这样的conf:
$ cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.8.4
nameserver 10.xxx.yyy.z
search rennes.mycompany.fr
从我的容器中,我看到:
search rennes.mycompany.fr
nameserver 127.0.0.11
options ndots:0
在我看来,奇怪的是,在容器中只能找到一部分主机配置。当我尝试从容器中获取任何公司托管的名称时,我会遇到名称解析失败的情况。
但是,如果我将主机的resolv.conf名称服务器添加到容器的名称服务器中,它将起作用:
$ echo名称服务器192.168.1.1 >> /etc/resolv.conf
因此,这确实不是做到这一点的方法……但是我不确定应该如何执行它。我试图在docker-compose中将'dns'添加到我的服务中,但是我没有工作(或者不是我所理解的方式),并且文档相当简明...
有没有办法告诉docker使用/共享主机的dns配置?我的问题是否可能来自我在公司网络外部建立形象的原因?
编辑: docker-compose.yml
version: '3.3'
services:
my-apache:
image: apache:latest
ports:
- 8088:80
networks:
- my-project-net
dns:
- 192.168.1.1
depends_on:
- my-project
my-project:
image: my-project:latest
networks:
- my-project-net
dns:
- 192.168.1.1
networks:
my-project-net:
driver: bridge
只有'my-project'才需要访问公司dns,但我都向它们都添加了dns,以防万一我错过了一些线索...
编辑2:更多细节和尝试
我尝试解析的名称如下所示:
some-pf-db.network.mycompany.fr
(已修改的)docker daemon conf看起来像这样:
$ cat /etc/docker/daemon.json:
{
"insecure-registries": [
"some.test.registry.mycompany.fr:5000"
],
"log-driver": "json-file",
"log-opts": {
"max-file": "3",
"max-size": "10m"
},
"dns-opts": ["ndots:15"]
}
在@BMitch链接之后,我尝试使用最多15个ndots选项更新docker daemon(+ restart)(不要以为我需要那么多,但这是懒惰的方式!)...不幸的是,它没有解决这个问题。新值替换了容器中的前一个值,但始终无法到达dns
无法将主机名“ some-pf-db.network.mycompany.fr”转换为地址:名称解析暂时失败
EDIT3:我看错了容器...因此,将docker daemon conf(/etc/docker/daemon.json)中的点(ndots)阈值更改为(例如)15,并删除了“ dns”服务的参数使魔术发挥作用!我现在可以访问我的公司dns的名称(其中有很多点!)
127.0.0.11
即使在容器上覆盖DNS,也应在容器内输入该条目。这指向容器内部的回送接口,该接口具有端口53的映射以返回到docker引擎以进行DNS解析。您需要docker进行DNS解析,以使您可以使用DNS进行容器到容器的联网以进行发现。
即使127.0.0.11
容器中有条目,您仍然应该仍然看到docker引擎向您的DNS服务器发出呼叫,因此这不是错误,也不是缺乏可配置性,您只是从容器内部看不到此配置。
我们需要有关您遇到的实际问题的更多详细信息,但是我之前从中看到的一个可能的问题是,在某些特定情况下,DNS无法解析没有全限定名称的外部主机。您可以在此问题/线程中阅读有关此内容的信息:https : //github.com/moby/moby/issues/32093
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句