コミュニティソリューション

CasaOSアプリはポート5000を共有:コンテナーポートではなくホストポートを変更する

A June 2024 CasaOS question about MusicBrainz, HandBrake, and other apps sharing port 5000; a later reply identified changing the host port while preserving the container port.

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で正しいフィールドを編集する

  1. アプリの設定またはカスタムインストール設定を開きます。
  2. ホストとコンテナの値が表示されているポート項目を見つけます。
  3. コンテナの値はイメージのデフォルトのままにします。
  4. 使用されていないホストポートを選択します。
  5. 保存し、表示された指示に従ってコンテナを再作成または再起動します。
  6. 新しいホストポートを使用してアプリを開きます。

新しいポートを割り当てる前に確認する

CasaOSのアプリ一覧またはコンテナ設定で、既存のマッピングを確認してください。また、Debianに直接インストールされたサービスも確認しましょう。これらはCasaOSアプリとして表示されなくても、同じホストポートを使用している可能性があります。既存のサービスを把握していない限り、22、53、80、443、445などの一般的なインフラストラクチャポートは割り当てないでください。

ホストネットワークではこの柔軟性が失われる

ホストネットワークモードでは、コンテナがホストのネットワーク名前空間を共有するため、すでに使用されているリッスンポートを通常の方法で再マッピングできません。Dockerのホストネットワークに関するドキュメントでも、特定のホストポートにバインドできるサービスは1つだけであることが説明されています。

CasaOSのポート競合に関するよくある質問

どの番号を変更すればよいですか?

HOST:CONTAINERの最初の番号であるホストポートを変更します。

すべてのアプリでコンテナポート5000を使用できますか?

各コンテナが分離され、それぞれが異なるホストポートを公開していれば可能です。

アプリはインストールできたのに開かないのはなぜですか?

アプリケーションがリッスンしていないコンテナポートをマッピング先に指定している可能性があります。