Docker で「Bind for 0.0.0.0:8080 failed: port is already allocated」が解消できない
`docker run` の `-p` で指定したホストポートを、既存のコンテナや別プロセスが使っているのが原因。
使用中のポートを特定して止めるか、別のホストポートに割り当て直す。
#docker#port#run#bind#network
公開:
要約
Bind for 0.0.0.0:8080 failed: port is already allocated は、-p ホスト:コンテナ で指定したホスト側ポートが、すでに誰かに使われているときに出ます。
OS は同じポートを二重に貸し出せないため、Docker が公開に失敗しています。
対処は「使っている相手を止める」か「別のポートを使う」の二択です。
よくある原因
- 同じホストポートを公開する別のコンテナが起動中。
- 前回のコンテナが止まりきらずポートを保持している。
- Docker 以外のプロセス(ローカルの開発サーバ等)が同じポートを使っている。
解決策
1. 公開中のコンテナを止める
まずはポートを握っているコンテナを探します。
docker ps # PORTS 列で 8080 を公開中のものを確認
docker stop <container_id>2. ホストのプロセスを特定する
コンテナでなければ、ホスト側のプロセスを調べます。
lsof -i :8080 # Windows は: netstat -ano | findstr :8080該当プロセスを終了すればポートが空きます。
3. 別のポートに割り当てる
相手を止められないときは、ホスト側のポートをずらします。
docker run -p 8081:8080 myimage左がホスト、右がコンテナです。
ブラウザからは http://localhost:8081 で開きます。