Docker DNS Not Seeing External Servers
我最近一直在用主机名解决Docker版本17.04-CE的问题,我不确定是什么导致了这个问题。我目前有Docker设置,运行时不使用任何选项,但最近我的容器在通过域名连接时无法再访问谷歌和互联网上的任何其他主机(IPv4工作正常,我可以ping外部IP)。
我已经为服务添加了dns:8.8.8.8到docker-compose.yml,这是一个创可贴,但是当使用任何其他docker-compose文件(如laradock)时,我不能ping或卷曲外部服务器。我仍然可以弯曲其他Docker实例,实际上我可以弯曲内部网中的服务器。在容器内手动更改/etc/resolv.conf是可行的,但我需要它在开箱即用的情况下工作。另外,如果我使用docker run-it正常启动一个容器,那么容器bash功能的示例将如预期的那样工作。
docker compose run resolv.conf(docker compose up-d nginx mysql&;docker compose exec workspace cat/etc/resolv.conf)-不工作
1 2 3 4 | search machines.redacted.ca it.redacted.ca services.redacted.ca apps.redacted.ca nameserver 127.0.0.11 options ndots:0 |
vanilla docker resolv.conf(docker run-it mysql ping google.ca)-工作正常
1 2 3 4 5 | # 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服务器被阻止递归DNS查询。我通过在调试模式下设置Docker来跟踪这个bug,然后监视Docker和DNS服务器日志。Docker似乎发送DNS查询很好,但看起来bind9在拒绝递归查询方面吐出了错误。我在谷歌上搜索了这个问题,然后改变了下面的设置,一切都恢复了正常。我将以下内容添加到bind9配置中,它工作正常。
奇怪的是,我的一个同事也在使用同样的方法,但是查询对他们来说很有效。他运行的是一个不同的发行版,不过是一个老版本的docker和docker compose。
命名的.conf.options:
1 2 3 4 5 6 7 8 9 | options { ... allow-recursion { all; }; } |