docker compose up が「port is already allocated」で起動できない
コンテナの公開ポートがホスト側で別プロセスに使われていると bind に失敗する。
占有プロセスを止めるか、compose.yaml の ports を別ポートに変える。
#compose#port#network#bind
公開:
要約
Bind for 0.0.0.0:8080 failed: port is already allocated は ホスト側のポートが他プロセスで使用中 という意味。
占有プロセスを特定して止めるか、compose.yaml の ports を別の番号に振り替える。
よくある原因
- 別コンテナが同ポートを bind: 古い
docker runのコンテナが残っている - compose の残骸: 前回
Ctrl+Cで異常終了し、docker compose downを打っていない - ホスト側のネイティブサービス:
mysqld/postgresql等が systemd で起動済み - ports 表記ミス:
"80"だけ書いてホスト側の指定が抜けている
解決策
1. 占有プロセスの特定
# Linux / macOS
sudo lsof -i :8080
# Windows (PowerShell)
netstat -ano | Select-String ":8080"PID を特定し、不要なら kill <PID> または GUI から停止。
2. 残骸コンテナの掃除
docker compose down
docker ps -a
docker rm -f <container>docker compose down は services / networks をまとめて削除する。
3. ホストポートを変える
services:
web:
image: nginx
ports:
- "8081:80" # ホスト 8081 → コンテナ 80開発端末では空いているポートに振り替えるのが最も早い。
4. 内部通信のみにする
services:
db:
image: postgres
expose:
- "5432" # 同 compose 内のサービスだけアクセス可ホストから直接叩く必要が無いサービスは ports を消し expose に置き換える。