2017-02-14 67 views
3

当前码头版本:1.13.1, build 092cba3码头集装箱内所有外部DNS查询失败

/etc/resolv.conf中的内容:

search mycompany.local 
nameserver 127.0.0.11 
options ndots:0 

(实际公司名称混淆)。

nslookup对主机本身是100%的罚款,但从容器内的任何外部主机名看起来失败(无法事件运行apt-get update)。 4节点群集中的所有主机都存在相同的症状。 请注意内部服务名称解析似乎在容器之间工作。

直接在我的笔记本电脑上运行相同的应用程序(在同一办公室网络上)主机名解析得很好。

这正在变成一个缓慢移动的灾难。

涉及的集群仍然是1.12之前的版本,它可能有任何方向。

+0

好吧,我可以看到127.0.0.11的nameserver条目可能是(?)的问题。重复测试[从这里](http://www.networkcomputing.com/data-centers/docker-networking-basic-dns-configuration/2052420654)给出一个工作容器。它可能是造成问题的码头构成? – demaniak

+0

哦,我的灵魂。经过这些努力,似乎主DNS服务器有一些令人头疼的问题。在我们的支持人员重申dns服务后,突然之间再次开始工作。为什么我在主机上的nslookup测试没有失败 - 我不知道。 – demaniak

回答

0

在Linux中,lo或本地主机接口将具有地址127.0.0.1/8(即网络掩码255.0.0.0)。该掩码覆盖该整个范围:

127.0.0.0 - 127.255.255.255 

由于127.0.0.11落入该范围内,到该地址的连接将尝试经由lo接口路线(容器),为连接的路由。除非您的容器具有内部配置的地址有一个侦听该地址的DNS解析器,否则会导致连接超时。

您或许可以通过将127.0.0.11路由到容器的主界面(例如eth0)或通过更改DNS解析器地址来解决此问题,使其位于127.0.0.0/8之外。

您也可以明确设置DNS服务器IP。

docker run --dns 1.2.3.4     # set one server 
docker run --dns 1.2.3.4 --dns 5.6.7.8 # set multiple servers 

或者使用泊坞窗 - compose.yml:

dns: 1.2.3.4 

dns: 
    - 1.2.3.4 
    - 5.6.7.8 
+0

感谢您的回复。我相信你在技术上是正确的,但在完成[this]之后(http://www.networkcomputing.com/data-centers/docker-networking-basic-dns-configuration/2052420654),我很努力地想知道为什么我最终在/ etc/resolv.conf中使用127.0.0.11。启动与该链接相同的容器(无需撰写),正确的名称服务器登陆resolv。另外,上周这一切仍然正常。唯一的主要变化是升级到码头1.13 – demaniak

+0

@demaniak 1.13容器系统上的名称服务器IP是否为127.0.0。*以外的其他名称?通常,Linux主机系统上的名称服务器IP只是简单地传递给容器(至少在我的经验中)。 –

+0

之前,我没有理由在DNS内部嗅探,所以我可以肯定地说:主机本身在10.0.0。*范围内具有合适的名称服务器,并且dns正在工作。在此群集中部署的此应用的所有容器都具有“127.0.0.11”名称服务器(外部名称解析失败)。 hm,或者应该编辑问题来清楚起见:内部服务名称解析实际上看起来很好。通常不认为“DNS”本身。 – demaniak

0

这是我使用的设置:

  1. 安装的dnsmasq。
  2. 运行echo interface=docker0 > /etc/dnsmasq.d/docker
  3. 重新启动dnsmasq。
  4. 添加--dns 172.17.0.1你泊坞窗运行或泊坞窗守护程序(它添加到DOCKER_OPTS在/ etc /默认/泊坞窗变量或编辑/ lib中ExecStart指令/systemd/system/docker.service)。
  5. 重新启动Docker。

现在,您已将所有容器指向Dnsmasq作为DNS解析器。另外一个优点是在/ etc/hosts中的条目中也可以解析。