web-dev-qa-db-ja.com

Docker Network Nginx Resolver

私の構成で廃止されたDockerリンクを削除しようとしています。残っているのは、コンテナを再作成したときにそれらの_Bad Gateway_ nginxリバースプロキシエラーを取り除くことです。

注:ブリッジモードでDockerネットワークを使用しています。 (_docker network create nettest_)

私はnginx内で次の構成スニペットを使用しています:

_location / {
      resolver 127.0.0.1 valid=30s;
      set $backend "http://confluence:8090";
      proxy_pass $backend;
_
  1. confluenceという名前のDockerネットワークでホスト名nettestのコンテナーを開始しました。
  2. 次に、ネットワークnettestでnginxコンテナを開始しました。
  3. Nginxコンテナ内からconfluenceにpingできます
  4. confluenceはnginxコンテナの_/etc/hosts_ファイル内にリストされます
  5. nginxログには、解決中に `send()failed(111:Connection refused)、リゾルバ:127.0.0.1:53 ''と表示されます
  6. 127.0.0.11_からdocker network default dns resolver _/etc/resol.conf_を試しました
  7. nginxログにはconfluence could not be resolved (3: Host not found)と書かれています

誰もがDockerネットワークでnginxリゾルバを設定する方法、またはDockerネットワークホスト名を正しく解決するようにNginxを強制する方法の代替案を知っていますか?

41
blacklabelops

まず、127.0.0.11でDocker組み込みDNSサーバーを使用する必要があります。

問題の原因は次のいずれかです。

  1. nginxは、DNSクエリにIPv6(AAAAレコード)を使用しようとしています。

    ソリューションについては、 https://stackoverflow.com/a/35516395/152949 を参照してください。

    基本的に次のようなもの:

    http {
        resolver 127.0.0.11 ipv6=off;
    }
    

    これはおそらくDocker 1.11の問題ではないでしょう。

    DockerドメインIPv6クエリを外部サーバーに転送しないように修正しました( #21396

  2. resolver構成ディレクティブを誤ってオーバーライドしないように注意してください。私の場合、 MozillaのSSL構成ジェネレーターserverブロックresolver 8.8.8.8 8.8.4.4;にあり、httpブロックのresolver 127.0.0.11;をオーバーライドしていました。それは長い間頭をかいていた...

81
Teoh Han Hui

たぶん、コンテナの/etc/resolv.conf

コンテナーの正しいDNS構成が表示され、リゾルバーにそのDNSサーバーIPが使用されます。

127.0.0.11はRancherでは機能しません

4
exiaohao

これは、172.0.0.11のdocker internal resolverを使用してHost.docker.internalをルックアップしようとするWindowsのdockerコンテナーでこれに当たります。 Host.docker.internalを除くすべてのクエリは正しく解決されます。修正は、nginx.confのリゾルバー行にipv6 = offフラグを追加することでした。

0
hdub