docker的DNS没有看到外部服务器

我最近有Docker版本17.04-CE的主机名解决问题,我不知道是什么原因造成的。 我目前有docker安装程序不要在运行时使用任何选项,但最近我的容器不能访问谷歌和互联网上的任何其他主机通过域名连接(IPV4工作正常,我可以ping外部IP)。

我已经添加了dns:8.8.8.8到docker-compose.yml的服务,这是一个bandaid,但是当使用任何其他docker-compose文件(如laradock)时,我无法ping或curl外部服务器。 我仍然可以curl其他docker实例,我可以实际上curl我的内部网服务器。 在容器中手动更改/etc/resolv.conf工作,但我需要它开箱即用。 另外,如果我通常使用docker run来启动一个容器,那么按照预期的方式,可以使用例子容器bashfunction。

docker-compose运行resolv.conf(docker-compose up -d nginx mysql && docker-compose exec workspace cat /etc/resolv.conf) – NOT WORKING

search machines.redacted.ca it.redacted.ca services.redacted.ca apps.redacted.ca nameserver 127.0.0.11 options ndots:0 

香草docker resolv.conf(docker运行-it mysql ping google.ca) – 工作精细

 # Generated by resolvconf search machines.redacted.ca it.redacted.ca services.redacted.ca apps.redacted.ca nameserver 192.168.5.5 #Internal DNS server nameserver 8.8.8.8 

对我来说,最终结果是我的内部DNS服务器是块recursionDNS查询。 我通过在debugging模式下设置docker来跟踪这个bug,然后监控docker和dns服务器日志。 Docker似乎正在发送DNS查询,但看起来像Bind9吐出关于拒绝recursion查询的错误。 我GOOGLE了这个问题,并改变下面的设置,一切工作再次。 我将以下内容添加到bind9configuration,它工作。

奇怪的是,我的同事之一是使用相同的方法,但查询工作正常。 他正在运行一个不同的发行版,然后是一个老版本的docker和docker-compose。

Named.conf.options:

 options { ... allow-recursion { all; }; }