- Docker
Docker port is already allocatedの直し方
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期連続の黒字決算。