最近、nginx をリバース プロキシとして使用し、docker で nginx を実行するシステムが展開されました。 $ docker run -d --name nginx $PWD:/etc/nginx -p 80:80 -p 443:443 nginx:1.15 プロキシする必要がある API サービスは、ホスト マシンのポート 1234 で実行されます。nginx.conf の関連する構成は次のとおりです。 サーバー{ ... 場所 /api { プロキシパス http://localhost:1234 } ... } その結果、アクセスしてみると常に 502 Bad Gateway エラーが報告され、エラー ログにはアップストリームに接続できないことが示されていました。 考えてみると、nginx.conf の localhost に問題があるようです。 nginx は docker コンテナ内で実行されているため、この localhost はホストの localhost ではなく、コンテナの localhost です。 この時点で、この記事が解決しようとしている問題が発生します。コンテナからホスト ネットワークにアクセスするにはどうすればよいでしょうか?インターネットを検索する方法はいくつかあります。 ホストIPを使用する Docker をインストールすると、ホストに仮想ゲートウェイ docker0 がインストールされます。localhost の代わりに、docker0 上のホストの IP アドレスを使用できます。 まず、次のコマンドを使用してホストの IP アドレスを照会します。 $ ipアドレス表示docker0 3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 状態 UP グループ デフォルト リンク/イーサ 02:42:d5:4c:f2:1e brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 スコープ グローバル docker0 valid_lft 永久 preferred_lft 永久 inet6 fe80::42:d5ff:fe4c:f21e/64 スコープ リンク valid_lft 永久 preferred_lft 永久 ホストマシンの IP は 172.17.0.1 であることがわかるので、proxy_pass http://localhost:1234 を proxy_pass http://172.17.0.1:1234 に変更すると、502 Bad Gateway エラーを解決できます。 ただし、ホストマシンの IP アドレスはシステムによって異なります。たとえば、Linux では通常 172.17.0.1 ですが、macOS では 192.168.65.1 です。この IP アドレスも変更できます。したがって、IP を使用して nginx.conf を構成することは、環境間で使用できません。 ホストネットワークの使用 Docker コンテナの実行中、構成に使用できるネットワークの種類は、ホスト、ブリッジ、なしの 3 つです。デフォルトは bridge で、これはブリッジ モードでホストに接続されたブリッジ ネットワークを意味します。host はホスト ネットワークで、これはホストとネットワークを共有することを意味します。none はネットワークがないことを意味し、コンテナーはインターネットに接続できません。 コンテナがホスト ネットワークを使用する場合、コンテナとホストはネットワークを共有するため、コンテナ内でホスト ネットワークにアクセスできるようになり、コンテナのローカルホストがホストのローカルホストになります。 コンテナのホスト ネットワークを構成するには、docker で --network host を使用します。 $ docker run -d --name nginx --network ホスト nginx 上記のコマンドでは、コンテナがホストとネットワークを共有し、コンテナ内の公開ポートがホスト上の公開ポートと同じであるため、以前のように -p 80:80 -p 443:443 を使用してポートをマッピングする必要はありません。 ホストネットワークを使用する場合、nginx.conf を変更する必要がなく、localhost も引き続き使用できるため、以前の方法よりも汎用性が高くなります。ただし、ホスト ネットワークはブリッジ ネットワークほど分離されていないため、ホスト ネットワークを使用する場合のセキュリティはブリッジほど高くありません。 要約する この記事では、ホスト IP を使用する方法と、ホスト ネットワークを使用してコンテナーからホスト ネットワークにアクセスする方法の 2 つの方法を提案します。どちらの方法にも長所と短所があります。ホスト IP を使用すると分離性は向上しますが、汎用性は低くなります。一方、ホスト ネットワークを使用すると汎用性は向上しますが、ホスト ネットワークが公開されるリスクがあります。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL ルートパスワードを変更する複数の方法 (推奨)
>>: JavaScriptはブラウザがIEかどうかを判定します
目次ソリューション分析スライス履歴書のダウンロード具体的な解決プロセス論理的分析フロントエンドサーバ...
背景色と透明度の設定上記のように、最初の画像の場合は、灰色の背景と左上隅に白い「カバー」という文字を...
Alibaba Cloud Server を使用している場合は、セキュリティ グループ設定でポート ...
目次序文1. 需要と効果必要効果2. コードの実装index.vue(html)日付方法テスト結果3...
目次インデックスとは何か主キーインデックスと通常のインデックスの違いインデックスにはどのデータ構造が...
背景当初は VMware の公式 Web サイトから 6.7 Vcenter をダウンロードしたかっ...
日常的なウェブサイトの保守と管理では、多くの SQL ステートメントが使用されます。熟練して使用する...
美しいコードは美しい Web サイトの基礎です。優れた CSS は、同様に優れた HTML の上にの...
1. ダウンロードリンクをダウンロードするダウンロードをクリックします。Oracle アカウントにロ...
Linux では、アプリケーションをダウンロードしてインストールすると、起動時にアプリケーション名...
最近、Docker を使用して Java アプリケーションをデプロイしていたときに、タイムゾーンが間...
Vue では、ほとんどの場合、テンプレートを使用して HTML を作成することを推奨しています。ただ...
Vueでの監視方法時計知らせ名前: 監視する属性に同じ名前を付ける必要があります。 1. 機能Vue...
目次基本的なHTTPリクエストの設定async/await を使用した Axios Axios によ...
序文コードを書くと、時々基数変換の問題に遭遇します。一般的な変換には、2進数、8進数、10進数、16...