Bind for 0.0.0.0:8080 failed: port is already allocated は、-p 8080:80 で使おうとしたホストの 8080 番ポートを、すでに別のコンテナが使っているときのエラーです。

docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint p2 (...): Bind for 0.0.0.0:8080 failed: port is already allocated

まず、どのコンテナが 8080 を使っているかを探します。

docker ps --filter publish=8080
p1 0.0.0.0:8080->80/tcp
原因 確かめ方 直し方
別のコンテナが動いている docker ps --filter publish=8080 そのコンテナを止める(docker stop p1)
Compose の別のプロジェクトが動いている docker compose ls そのプロジェクトで docker compose down
どちらも使う ― ホスト側のポートを変える(-p 8081:80)
ホストのプロセス(コンテナ以外)が使っている ss -ltnp(Windows は netstat -ano) エラー文が address already in use になる(下で説明)

確認環境:Docker Engine 29.4.3、Docker Compose v5.1.3(Linux)で再現しました(確認日 2026年10月11日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Docker port is already allocatedの直し方」

docker ps の PORTS 列の読み方

NAMES     STATUS                  PORTS
p2        Created
p1        Up Less than a second   0.0.0.0:8080->80/tcp
表示 意味
0.0.0.0:8080->80/tcp ホストの 8080 を、コンテナの 80 につないでいる
左側(0.0.0.0:8080) ぶつかるのはこちら(ホスト側のポート)
右側(80) コンテナの中のポート。コンテナごとに同じでよい

-p ホスト:コンテナ の、ホスト側の番号が重なるとエラーになります。 コンテナ側の番号は、複数のコンテナで同じ 80 でも問題ありません。-p 8081:80 のように、ホスト側だけ変えると、2つ目のコンテナも起動しました。

docker ps --filter publish=8080 は、ホストに 8080 を公開しているコンテナだけを表示します(Docker の公式ドキュメント)。コンテナが多いときに便利です。

止まっているコンテナは、ポートを使わない

状態 2つ目のコンテナ(-p 8080:80)
p1 が動いている(Up) port is already allocated
p1 を docker stop した(Exited) 起動できた

確認環境では、止めたコンテナはポートを使っていませんでした。 docker ps -a に表示される止まったコンテナではなく、docker ps(動いているもの)を見ます。

注意:失敗したコンテナが Created のまま残る

エラーになった p2 は、docker ps -a に Created の状態で残っていました。 同じ名前で、ポートを変えて起動し直すと、次のエラーになりました。

docker: Error response from daemon: Conflict. The container name "/p2" is already in use by container "6c13cb14...". You have to remove (or rename) that container to be able to reuse that name.
docker rm p2                          # 残ったコンテナを消してから
docker run -d --name p2 -p 8081:80 イメージ

Compose の別のプロジェクトが持っている

projA と projB の2つのフォルダに、どちらも "8080:80" の compose.yaml を置きました。

$ cd projB && docker compose up -d
 Container projb-web-1 Created
 Container projb-web-1 Starting
Error response from daemon: failed to set up container networking: ... Bind for 0.0.0.0:8080 failed: port is already allocated

projB のフォルダで docker compose ps を見ても、projA のコンテナは表示されません。 どのプロジェクトのコンテナかは、次の方法で分かりました。

$ docker compose ls
NAME                STATUS              CONFIG FILES
proja               running(1)          /srv/s4/p9/cp/projA/compose.yaml

$ docker ps --filter publish=8080 --format '{{.Names}}\t{{.Label "com.docker.compose.project.working_dir"}}'
proja-web-1 /srv/s4/p9/cp/projA

docker compose ls の CONFIG FILES に、ポートを持っているプロジェクトのフォルダが表示されます。 別の案件のフォルダで docker compose up したまま、次の案件を起動すると起きやすい形です。projA で docker compose down すると、projB が起動できました。

2つを同時に動かすなら

services:
  web:
    ports:
      - "${WEB_PORT:-8080}:80"     # 環境変数でホスト側を変えられるようにする

ホスト側のポートを、.env などで変えられるようにしておくと、プロジェクトごとに別の番号で動かせます。 確認環境では、projB の .env に WEB_PORT=8082 と書くと、0.0.0.0:8082->80/tcp で起動しました。 Compose の書き方は、既存の記事「Docker Composeの使い方|compose.yamlの書き方と開発環境の作り方」で扱っています。

ホストのプロセスが使っているときは、エラー文が違う

ホストで python3 -m http.server 8090 を動かしてから、-p 8090:80 でコンテナを起動しました。

docker: Error response from daemon: failed to set up container networking: ... failed to bind host port 0.0.0.0:8090/tcp: address already in use
ポートを使っているもの エラー文の最後
別のコンテナ Bind for 0.0.0.0:8080 failed: port is already allocated
ホストのプロセス(Web サーバー・IDE など) failed to bind host port 0.0.0.0:8090/tcp: address already in use

port is already allocated なら、まず Docker のコンテナを探します。 address already in use なら、ホストのプロセスを探します。

$ ss -ltnp | grep 8090
LISTEN 0  5  0.0.0.0:8090  0.0.0.0:*  users:(("python3",pid=3785,fd=3))

コンテナが使っているポートは、ss では docker-proxy というプロセスとして表示されました。 ホストのプロセスの探し方(Windows・Mac を含む)は、関連記事の「Port 8080 was already in useの直し方|OS別の手順」で扱っています。

確認の手順(チェックリスト)

順番 確認すること 方法
1 エラー文の最後 port is already allocated か address already in use か
2 使っているコンテナ docker ps --filter publish=8080
3 Compose のどのプロジェクトか docker compose ls
4 止めてよいか 止める(docker stop・docker compose down)
5 両方使うなら ホスト側のポートを変える
6 失敗したコンテナ docker ps -a の Created を docker rm

よくある質問

Q. 127.0.0.1:8080:80 と書けば、ぶつかりませんか。 A. 確認環境では、すでに 0.0.0.0:8080 を使っているコンテナがあるとき、-p 127.0.0.1:8080:80 も起動できませんでした。0.0.0.0 はすべての IP アドレスを表すためと読めます。ホスト側のポート番号を変えます。

まとめ

  • ホスト側のポート(-p 8080:80 の 8080)を、別のコンテナが使っているエラー
  • docker ps --filter publish=8080 で使っているコンテナを探す
  • Compose の別のプロジェクトは docker compose ls で見つかる
  • ホストのプロセスなら address already in use とエラー文が違う
  • 失敗したコンテナは Created のまま残る。同じ名前で起動し直す前に docker rm

参考・出典

確認日はいずれも 2026年10月11日です。

  • Docker Docs「docker container ls」(filter の publish):https://docs.docker.com/reference/cli/docker/container/ls/

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Docker port is already allocatedの直し方」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?