できない.dev

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 が公開に失敗しています。

対処は「使っている相手を止める」か「別のポートを使う」の二択です。

よくある原因

  1. 同じホストポートを公開する別のコンテナが起動中。
  2. 前回のコンテナが止まりきらずポートを保持している。
  3. 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 で開きます。

この記事は役立ちましたか?