Dockerの「port is already allocated」の対処

コンテナを起動しようとすると、こう止まる。

Error: Bind for 0.0.0.0:8080 failed: port is already allocated

指定したポート(この例では8080)を、すでに別のプロセスかコンテナが使っている、という意味だ。同じポートは同時に1つしか使えない。

何が使っているか特定する

まず、動いているコンテナを見る。

Terminal window
docker ps

コンテナでなくホストのプロセスが使っている場合は、こちらで特定する。

Terminal window
lsof -i :8080

対処1:競合しているコンテナを止める

不要なコンテナが掴んでいるなら止める。

Terminal window
docker stop <コンテナID>

対処2:別のポートに割り当てる

使用中のポートを避けて、ホスト側を別の番号にする。

Terminal window
docker run -p 8081:80 myimage # ホスト8081 -> コンテナ80

まとめ

  • 原因は指定ポートが使用中
  • docker pslsof -i :ポート で使用元を特定
  • 競合コンテナは docker stop で止める
  • 避けたいなら -p 別ポート:コンテナポート で割り当て直す