Медленное разрешение DNS внутри контейнера Docker

Медленное разрешение DNS внутри контейнера Docker

Я застрял с проблемой очень медленного разрешения DNS внутри контейнера Docker. Простой GET для 'google.com' занимает около 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

Решил проблему, удалив все DNS-сервера, кроме 8.8.8.8 из daemon.json. Это единственный сервер, который быстро разрешает домен в моем случае. Протестировал разные серверы через 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-адресом в качестве подчиненного устройства к мосту.

Связанный контент