最近、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かどうかを判定します
目次vue2のキャッシュ機能Vue キャッシュ関数の変換最適化要約するvue2のキャッシュ機能vue...
目次1. テーブルを作成する1.1 テストテーブルt_userを作成する1.2 一時テーブルの作成2...
jsonデータはhtml形式で返される必要がありますつまり、 response.setContent...
目次質問1: 小道具は具体的にどのように使用されますか?原理は何ですか?下を見る質問 2: 年齢に ...
プロジェクト(nodejs)では、一度に複数のデータをデータベースに挿入する必要があります。データベ...
HTMLとは何ですか? HTML は Web ページを記述するために使用される言語です。 •HTML...
MongoDB は高性能なデータベースですが、使用していくうちにパフォーマンスの問題が発生することが...
Docker インストール (Alibaba Cloud Server) Docker 公式 Ce...
ビジネスを想定: 2位の従業員の給与情報を見るデータベースを作成する emps が存在する場合はデー...
IE8 や Chrome で上記の設定を使用すると、画面の最大幅に合わせて表示が統一され、各列の幅は...
Linuxアラーム機能の紹介上記のコード: #include <stdio.h> #in...
質問: index.html で、iframe が son.html を導入します。son.html...
編集者:この記事では、インタラクティブデザインがブランドコミュニケーションチェーン全体で果たすべき役...
1. ディスクパーティション: 2. fdiskパーティションディスクが2 TB未満の場合はfdis...
目次Matlab セントロイドアルゴリズムMatlab はクローズドな商用ソフトウェアであり、米国政...