我注意到在我的docker容器中,主机名的DNS解析速度非常慢,最长可达5秒。在docker主机上,完全相同的主机名的分辨率需要几毫秒,在托管容器中需要4到5秒。
例如:
dig www.googleapis.com
; <<>> DiG 9.9.5-9+deb8u9-Debian <<>> www.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50096
;; flags: qr rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1480
;; QUESTION SECTION:
;www.googleapis.com. IN A
;; ANSWER SECTION:
www.googleapis.com. 3422 IN CNAME googleapis.l.google.com.
googleapis.l.google.com. 176 IN A 172.217.16.202
googleapis.l.google.com. 176 IN A 172.217.21.202
googleapis.l.google.com. 176 IN A 172.217.21.234
googleapis.l.google.com. 176 IN A 216.58.214.74
googleapis.l.google.com. 176 IN A 172.217.16.170
googleapis.l.google.com. 176 IN A 216.58.208.42
googleapis.l.google.com. 176 IN A 172.217.22.42
googleapis.l.google.com. 176 IN A 172.217.22.74
googleapis.l.google.com. 176 IN A 172.217.22.106
googleapis.l.google.com. 176 IN A 216.58.206.10
googleapis.l.google.com. 176 IN A 172.217.23.170
googleapis.l.google.com. 176 IN A 216.58.205.234
googleapis.l.google.com. 176 IN A 216.58.210.10
;; Query time: 4003 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Tue Jan 24 06:55:37 UTC 2017
;; MSG SIZE rcvd: 289
请注意查询时间约为4秒。
我的容器的resolv.conf
看起来像
nameserver 127.0.0.11
options ndots:0
其中127.0.0.11
似乎是内部docker dns服务。
我用DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
启动docker-engine,主机运行Ubuntu 16.04 LTS。
有没有办法调试慢速DNS解析或任何已知的解决方法?
答案 0 :(得分:2)
我遇到了类似的问题。然后我发现了以下问题。 https://github.com/moby/moby/issues/11407
我注意到您已在https://github.com/moby/moby/issues/31960
中发布此问题在我的场景中,这两个解决方法就足够了:
--net "host"
命令docker run
作为参数
--dns "127.0.0.11"
第一个不安全,它也搞乱了映射端口。但它确实有效。
第二种是使用dns。
127.0.0.11
适用于我的桌面。但在其他服务器上失败了。您可以指定在中国受欢迎的DNS服务器,例如在深圳,202.96.134.133
可以正常工作。
这是因为容器中的DNS 8.8.8.8
和8.8.4.4
在中国大陆有着令人难以忍受的延迟。
您可以使用
进行实验```bash
time docker run busybox ping -c 1 www.google.com
time docker run --net "host" busybox ping -c 1 www.google.com
time docker run --dns "127.0.0.11" busybox ping -c 1 www.google.com
time docker run --dns "202.96.134.133" busybox ping -c 1 www.google.com
```
有趣的事实:在aliyun中,8.8.8.8
和8.8.4.4
已经加速了。
https://gist.github.com/etuttle/bc1cd3814b984ec694d6#file-gistfile1-sh-L18-L43
答案 1 :(得分:0)
另一种可能的解决方案是使用一些DNS创建/更新文件/etc/docker/daemon.json
:
{
"dns": ["8.8.8.8", "1.1.1.1"]
}
然后重新启动docker daemon:
sudo systemctl restart docker