1. ホーム
  2. networking

[解決済み] Docker ネットワーク Nginx リゾルバ

2023-06-18 22:56:08

質問

私は自分の設定にある非推奨のDockerリンクを取り除こうとしています。残っているのは、これらの Bad Gateway nginx リバースプロキシエラーを取り除くことです。

注:Docker networksをブリッジモードで使用しています。( 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. そして、ネットワーク上のnginxコンテナを起動しました。 nettest .
  3. Pingが打てる confluence を nginx コンテナの中から実行できます。
  4. confluence は nginx コンテナの中の /etc/hosts ファイルの中に記載されます。
  5. nginxのログには send() failed (111: Connection refused) while resolving, resolver: 127.0.0.1:53
  6. docker network のデフォルトの dns リゾルバを試したところ 127.0.0.11 から /etc/resol.conf
  7. nginx のログには confluence could not be resolved (3: Host not found)

どなたか、Docker Networks で nginx resolver を設定する方法、または Nginx に Docker ネットワークのホスト名を正しく解決させる方法について、代替案をご存知の方はいらっしゃいますか?

どうすれば解決しますか?

まず、Dockerの組み込みDNSサーバーを 127.0.0.11 .

あなたの問題は、次のうちの1つが原因である可能性があります。

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

    参照 https://stackoverflow.com/a/35516395/1529493 を参照してください。

    基本的には以下のようなものです。

    http {
        resolver 127.0.0.11 ipv6=off;
    }
    
    

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

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

  2. を誤ってオーバーライドしないように注意してください。 resolver 設定ディレクティブを上書きしないように注意してください。私の場合は server ブロック resolver 8.8.8.8 8.8.4.4; から Mozilla の SSL 設定ジェネレータ をオーバーライドしていた resolver 127.0.0.11; を上書きしていました。 http ブロックの中にある。これには長い間頭を悩まされました...。