取消注释DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
in /etc/default/docker
as 马特·开瑞尔 https://stackoverflow.com/users/873559/matt-carrier建议做NOT为我工作。将我公司的 DNS 服务器放入该文件中也没有。但是,还有另一种方法(继续阅读)。
首先我们来验证一下问题:
$ docker run --rm busybox nslookup google.com # takes a long time
nslookup: can't resolve 'google.com' # <--- appears after a long time
Server: 8.8.8.8
Address 1: 8.8.8.8
如果该命令似乎挂起,但最终抛出错误“无法解析'google.com'”,那么您遇到了与我相同的问题。
The nslookup
命令查询 DNS 服务器 8.8.8.8,以便将“google.com”的文本地址转换为 IP 地址。讽刺的是,8.8.8.8 是Google 的公共 DNS 服务器 https://developers.google.com/speed/public-dns/. If nslookup
fails, 您的公司可能会阻止 8.8.8.8 等公共 DNS 服务器(我认为这是出于安全原因)。
您可能认为将公司的 DNS 服务器添加到DOCKER_OPTS
in /etc/default/docker
应该可以解决问题,但无论出于何种原因,它对我不起作用。我在下面描述了对我有用的方法。
SOLUTION:
在主机上(我使用的是 Ubuntu 16.04),找出主 DNS 服务器地址和辅助 DNS 服务器地址:
$ nmcli dev show | grep 'IP4.DNS'
IP4.DNS[1]: 10.0.0.2
IP4.DNS[2]: 10.0.0.3
使用这些地址创建一个文件/etc/docker/daemon.json
:
$ sudo su root
# cd /etc/docker
# touch daemon.json
把这个放进去/etc/docker/daemon.json
:
{
"dns": ["10.0.0.2", "10.0.0.3"]
}
从根退出:
# exit
现在重新启动docker:
$ sudo service docker restart
确认:
现在检查是否添加了/etc/docker/daemon.json
文件允许您将“google.com”解析为 IP 地址:
$ docker run --rm busybox nslookup google.com
Server: 10.0.0.2
Address 1: 10.0.0.2
Name: google.com
Address 1: 2a00:1450:4009:811::200e lhr26s02-in-x200e.1e100.net
Address 2: 216.58.198.174 lhr25s10-in-f14.1e100.net
参考:
我的解决方案基于 Robin Winslow 的一篇文章,该解决方案的所有功劳都归功于他。谢谢,罗宾!
“修复 Docker 的网络 DNS 配置。”罗宾·温斯洛。检索于 2016 年 11 月 9 日。https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/ https://robinwinslow.uk/2016/06/23/fix-docker-networking-dns/