テクノロジー · 実用ガイド

Docker の「port is already allocated」?変更前に所有者を証明する

競合は別コンテナ、ホストプロセス、重複 Compose マッピング、またはデーモン状態にあります。正確なホスト IP・プロトコル・ポートを固定し、確認済み所有者だけを変更します。

正確な Docker host tuple の所有者を変更前に証明するオリジナルイラスト。
オリジナルイラスト:要求 tuple から最小の確認済み変更へ。 Watch at Ease

このエラーは Docker が一つのホスト側 socket tuple を取得できなかった証拠で、所有者そのものは示しません。全リスナー停止や無関係なコンテナ削除の根拠ではありません。

まず 0.0.0.0、TCP、8080 のようにホスト IP・プロトコル・ポートを記録し、同じ tuple で Docker とホストを照合します。

正確な tuple と context を固定する

完全なエラー、docker context、Compose プロジェクトとファイル、ホスト IP/port、container port、TCP/UDP を記録します。

有効 Compose 設定または docker run を保存し、重複、override、replica、二重要求を確認します。

Docker の全マッピングを探す

正確な port/protocol で docker ps -a の publish filter を使い、container と project label を確認します。関連 context も調べます。

別プロジェクトの実行中 container が所有者なら、影響を確認してから停止または remap します。

ホスト listener を独立に証明する

Linux は ss、Windows は Get-NetTCPConnection の LocalPort で絞り、local address と owning process を照合します。

PID を service/executable に対応させます。docker-proxy/dockerd なら container、他なら host-owner 分岐です。

分類してから修復する

container、host process、重複設定ごとに、その所有者だけを変更します。

どの一覧も空なら logs、version、context、network mode、失敗 command を保存し、restart/upgrade は限定テストにします。

両側の exit test で閉じる

修復後に Docker mapping と host listener を再確認し、意図した所有者だけが正確な tuple を保持することを確かめます。

service を起動し、公開 mapping と想定経路からの接続、exit code を記録します。

Docker mapping、host socket、daemon state を分けるオリジナルイラスト。
オリジナルイラスト:同じエラーでも三つの所有層があります。 Watch at Ease