同じホスト上で複数の nginx docker コンテナを実行することは可能ですか? 質問する

同じホスト上で複数の nginx docker コンテナを実行することは可能ですか? 質問する

docker-compose のみを使用して、各コンテナがポート 80 を共有する複数の nginx コンテナを同じホスト マシンにマウントすることは可能ですか?

同じホスト上で複数のアプリケーションを実行するシステムを整理したいと考えています。各アプリケーションは、docker-compose ファイルで結び付けられた複数のリンクされた docker コンテナーで構成されており、各アプリケーションは、ホスト システムの nginx をリバース プロキシとして使用して世界に公開されています。ここまでは順調です。

新しい Docker アプリケーションを追加するたびに、そのアプリケーションの新しい nginx.conf ファイルをホスト nginx に追加する必要がありますが、nginx 構成をアプリケーションの docker-compose ファイルと nginx コンテナーとしてバンドルして、各アプリケーションがコンテナー内で必要なものをすべてきれいに維持できるようにしたいです。ただし、各 nginx コンテナーはポート 80 でリッスンする必要があるため、バインドできるのは最初のコンテナーだけです。ホスト nginx はポート 80 で複数の Web アプリケーションをリッスンできますが、複数の nginx インスタンスで同じことができますか?

更新しました :

したがって、これは厳密には不可能であるようです。目標は、アプリケーション固有の nginx 構成をできるだけ多くアプリケーションにバンドルすることなので、ホスト nginx がアプリケーション nginx への URL ルーティングのみを処理する一方で、アプリケーションがそのロジックを使用して独自の nginx コンテナーを起動するというソリューションを試しています。パフォーマンスについてはわかりませんが、これにより、ホストとアプリケーションの絡み合いが大幅に軽減されます。

ベストアンサー1

数年経ちましたが、この問題に遭遇した他の人のために答えておこうと思いました。

残念ながら、できません。同じポートに複数のコンテナを配置することはできません。これは、オペレーティング システムの性質によるものです。しかし、あなたがしようとしていることは理解できると思います。複数のカスタム構成 Web アプリケーションを用意したいのです。

これを実現する最良の方法は、リバースプロキシリバース プロキシは、メイン ポート (80 や 433 など) からのリクエストを他のポートまたはアドレスの Web サーバーに転送できるようにします。すべてのコンテナーに、独自の Nginx インスタンス (または他の Web サーバー) があり、構成とコードが含まれていると仮定します。これを行うには 2 つの方法があります。

Dockerでは、これを行う最も簡単な方法はnginx-proxy プロジェクトdocker-compose の環境に変数を追加するだけで、管理された nginx コンテナがリクエストを設定されたサイトに自動的に転送します。docker-compose のみが必要なので、これが望ましいことのように思えます。

これを自分で管理することもできます。すべてのサイトを nginx の他のポートでリッスンしたままにして、80 と 433 でリッスンする 1 つのメイン nginx コンテナーを用意し、作成したリバース プロキシを使用してリクエストを別のポートに転送します。

幸運を!

おすすめ記事