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アドレスを持つダミーインターフェースを追加する必要があります

関連情報