CasaOSユーザーが、コンテナポート5000を想定するWebアプリを複数インストールしました。しかし、複数のコンテナがDebianホスト上で同じポートを公開しようとしたため、アクセスできたのは1つのアプリだけでした。マッピングの両側を変更したところ、一部のアプリが応答しなくなりました。
基本ルールはシンプルです。アプリ自身のドキュメントにリッスンポートを設定できると記載されていない限り、アプリケーションのコンテナポートは変更しないでください。変更するのはホスト側のポートだけです。
Dockerのポートマッピングは左から右に読む
5001:5000
このマッピングでは、5001がブラウザーで使用するホストポート、5000がコンテナ内でアプリケーションがリッスンするポートです。Dockerの公式ポート公開ガイドでも、同じホストからコンテナへのモデルが使われています。
ポート5000を使用する2つのアプリを異なるホストポートに割り当てる
| アプリケーション | ホストポート | コンテナポート | ブラウザーアドレス |
|---|---|---|---|
| MusicBrainz | 5001 | 5000 | http://SERVER-IP:5001 |
| HandBrake | 5002 | 5000 | http://SERVER-IP:5002 |
ホストIPとポートの組み合わせは、それぞれ一意でなければなりません。ただし、各コンテナのネットワーク名前空間は分離されているため、複数のコンテナが内部で5000をリッスンすることは可能です。
コンテナポートを変更するとWeb UIが動作しなくなることが多い理由
イメージによっては、Webサーバーが固定された内部ポートで起動します。プロセスが5000でリッスンしている状態で、CasaOSがホストポート5001をコンテナポート5001にマッピングすると、Dockerは空のソケットにトラフィックを転送します。ブラウザーから応答がなくても、コンテナ自体は正常に見えることがあります。
上流のアプリケーションに、プロセスのリッスンポートも変更する設定または環境変数が明記されている場合に限り、コンテナポートを変更してください。
CasaOSで正しいフィールドを編集する
- アプリの設定またはカスタムインストール設定を開きます。
- ホストとコンテナの値が表示されているポート項目を見つけます。
- コンテナの値はイメージのデフォルトのままにします。
- 使用されていないホストポートを選択します。
- 保存し、表示された指示に従ってコンテナを再作成または再起動します。
- 新しいホストポートを使用してアプリを開きます。
新しいポートを割り当てる前に確認する
CasaOSのアプリ一覧またはコンテナ設定で、既存のマッピングを確認してください。また、Debianに直接インストールされたサービスも確認しましょう。これらはCasaOSアプリとして表示されなくても、同じホストポートを使用している可能性があります。既存のサービスを把握していない限り、22、53、80、443、445などの一般的なインフラストラクチャポートは割り当てないでください。
ホストネットワークではこの柔軟性が失われる
ホストネットワークモードでは、コンテナがホストのネットワーク名前空間を共有するため、すでに使用されているリッスンポートを通常の方法で再マッピングできません。Dockerのホストネットワークに関するドキュメントでも、特定のホストポートにバインドできるサービスは1つだけであることが説明されています。
CasaOSのポート競合に関するよくある質問
どの番号を変更すればよいですか?
HOST:CONTAINERの最初の番号であるホストポートを変更します。
すべてのアプリでコンテナポート5000を使用できますか?
各コンテナが分離され、それぞれが異なるホストポートを公開していれば可能です。
アプリはインストールできたのに開かないのはなぜですか?
アプリケーションがリッスンしていないコンテナポートをマッピング先に指定している可能性があります。
