Docker 容器内的 DNS 解析缓慢

Docker 容器内的 DNS 解析缓慢

我一直被 docker 容器内 DNS 解析非常慢的问题困扰着。对“google.com”的简单 GET 请求需要大约 4 秒才能完成,而主机上的相同请求只需 0.052 毫秒。如果我将请求发送到 IP 地址,请求也会完美运行,这就是我建议 DNS 问题的原因。我搜索了答案,其中大多数都是关于设置 dns 服务器的,/etc/docker/daemon.json 我这样做了,但这对我的问题没有帮助。服务器在 Ubuntu 16.04 上运行。我还有一个运行相同配置的开发服务器,但它运行良好。

主持人:

time curl -g 'google.com'

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

real    0m0.052s
user    0m0.004s
sys 0m0.004s

time nslookup google.com

Server:     188.93.16.19
Address:    188.93.16.19#53

Non-authoritative answer:
Name:   google.com
Address: 173.194.73.102
Name:   google.com
Address: 173.194.73.139
Name:   google.com
Address: 173.194.73.100
Name:   google.com
Address: 173.194.73.113
Name:   google.com
Address: 173.194.73.138
Name:   google.com
Address: 173.194.73.101


real    0m0.013s
user    0m0.004s
sys 0m0.004s

容器:

time curl -g https://google.com

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

real    0m4.592s
user    0m0.004s
sys 0m0.012s

time nslookup google.com

Server:     127.0.0.11
Address:    127.0.0.11#53

Non-authoritative answer:
Name:   google.com
Address: 64.233.165.139
Name:   google.com
Address: 64.233.165.101
Name:   google.com
Address: 64.233.165.102
Name:   google.com
Address: 64.233.165.113
Name:   google.com
Address: 64.233.165.100
Name:   google.com
Address: 64.233.165.138


real    0m4.029s
user    0m0.008s
sys 0m0.004s

守护进程.json

{
    "dns": ["188.93.16.19", "188.93.17.19", "8.8.8.8", "8.8.8.4"]
}

答案1

通过从 daemon.json 中删除除 8.8.8.8 之外的所有 DNS 服务器解决了该问题。在我看来,这是唯一一个可以快速解析域名的服务器。通过 测试了不同的服务器docker run --dns=<dns server> <image name> curl -g 'google.com'

答案2

我在使用 docker-compose 时遇到了这个问题。这也是一个 dns 问题。我添加了:

services: 
  my_app:
    dns:
      - 8.8.8.8
      - 4.4.4.4

对于我的 docker-compose.yml,它修复了性能问题。

答案3

我认为这与桥接 MAC 地址问题有关,如上所述这里. 您必须添加一个具有低 MAC 地址的虚拟接口作为桥接器的从属接口

相关内容