我正在为公司代理工作。 由于实施了许多限制,因此在构建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 nameserver 192.168.1.1 >> /etc/resolv.conf
因此,这确实不是实现此目标的方法...但是我不确定应该如何执行它。 我试图将'dns'添加到docker-compose的服务中,但是我没有用(或者不是我所理解的方式),并且文档相当简明……
是否可以告诉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 link之后,我尝试使用最多15个ndots选项更新docker daemon(+重新启动)(不要认为我需要那么多,但这是懒惰的方法!)。 。
,不幸的是它没有解决问题。新值替换了容器中的前一个值,但始终无法到达dns
无法将主机名“ some-pf-db.network.mycompany.fr”转换为 地址:名称解析暂时失败
EDIT3:我在看错容器...因此,将docker daemon conf(/ etc / docker / daemon.json),然后从服务中删除“ dns”参数,魔术就会起作用!现在,我可以访问公司dns的名称(其中有很多点!!)
答案 0 :(得分:0)
如果您使用的是docker-compose,则需要在yaml文件的服务定义中添加dns部分。
如果您直接在命令行中运行docker,则可以使用--dns=IP_ADDRESS...
参数定义公司名称服务器。
此处的文档中有更多详细信息:https://docs.docker.com/v17.09/engine/userguide/networking/default_network/configure-dns/
答案 1 :(得分:0)
即使您覆盖容器上的DNS,也希望容器内的127.0.0.11
条目。这指向容器内部的回送接口,该接口具有端口53的映射以返回到docker引擎以进行DNS解析。您需要使用docker进行DNS解析,才能使您使用DNS进行容器到容器的联网以进行发现。
即使容器中包含127.0.0.11
条目,您仍应该看到docker引擎呼出您的DNS服务器,因此这不是错误,也不是缺乏可配置性,您只是从内部看不到此配置容器。
我们需要您所遇到的实际问题的更多详细信息,但是我之前从中看到的一个可能的问题是,在某些特定情况下,DNS无法解析没有全限定名称的外部主机。您可以在此问题/线程中阅读以下内容: https://github.com/moby/moby/issues/32093