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 コンテナーを用意し、作成したリバース プロキシを使用してリクエストを別のポートに転送します。
幸運を!