このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:よくあるエラーと解決策②|ポート番号の重複エラーの原因と対処法

よくあるエラーと解決策②|ポート番号の重複エラーの原因と対処法

Dockerで複数のコンテナを動かしているときに、
「ポートがすでに割り当てられています」というエラーを見たことはありませんか?

これは、ホスト側のポート番号が他のコンテナと重なってしまったときに発生するエラーです。
ここでは、Apacheコンテナとnginxコンテナを使って、
ポート番号の重複エラーが出たときの原因と対処法を、やさしく解説していきます。

作業前のクリーンアップ

まずは、Dockerの中をスッキリさせておきましょう。
古いコンテナやイメージが残っていると、今回の検証に影響してしまうことがあります。

次のコマンドを実行して、使っていないDockerオブジェクトを削除します👇

docker system prune -a --volumes

このコマンドはDockerの“お掃除コマンド”です。
いらないコンテナ、イメージ、ネットワーク、ボリュームをまとめて削除してくれます。

オプション内容
-a未使用のイメージをすべて削除します。
--volumes使われていないボリュームも削除します。

実行結果

PS C:\Users\joeac\Desktop\docker\error1> docker system prune -a --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all anonymous volumes not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y

💡もしコマンド操作が不安な場合は、Docker DesktopのGUIで削除するのもOKです。
クリックで確認しながら削除できるので安心です。

ディレクトリの準備

次に、作業用のフォルダを作成します。
PowerShellで以下のコマンドを順に入力します。

cd desktop/docker
mkdir error2
cd error2

これで、デスクトップ上の「docker」フォルダ内に「error2」フォルダが作成され、
その中で作業を進められるようになります。

実行結果

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> mkdir error2

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2025/10/25     3:08                error2

PS C:\Users\joeac\Desktop\docker> cd error2
PS C:\Users\joeac\Desktop\docker\error2>

compose.yamlファイルの作成

VSCodeを開いて、以下のコマンドを実行します。

code compose.yaml

VSCodeが起動したら、次の内容を入力して保存しましょう。

services:
  apache:
    image: httpd:latest
    ports:
      - "80:80"

  nginx:
    image: nginx:latest
    ports:
      - "80:80"

この状態では、Apacheとnginxの両方が80番ポートを使う設定になっています。
これが、今回の“ポート番号重複エラー”の原因です。

コンテナを起動してみる

では、実際に起動してみましょう。

docker compose up -d

Dockerが両方のコンテナを作成しようとしますが、
しばらくすると次のようなエラーが出ます👇

Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint error2-nginx-1 (e7c1319405f49008108378abcf8254f7b6675696702f123c6c00dcbc44ea4961): Bind for 0.0.0.0:80 failed: port is already allocated

日本語にすると、
「0.0.0.0:80(ホストの80番ポート)はすでに使われています」という意味です。

つまり、先に起動したApacheコンテナが80番を使っているので、
nginxが同じポートを確保できなかった
ということですね。

実行中のコンテナを確認してみよう

どのコンテナがポートを使っているのかを確認するには、
次のコマンドを実行します👇

docker container ls
コマンド説明
docker container ls現在実行中のコンテナの一覧を表示します。

実行結果

PS C:\Users\joeac\Desktop\docker\error2> docker container ls
CONTAINER ID   IMAGE          COMMAND              CREATED         STATUS         PORTS                                 NAMES
09670d7412a6   httpd:latest   "httpd-foreground"   5 minutes ago   Up 5 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp   error2-apache-1

この結果から、Apacheコンテナが0.0.0.0:80をすでに使用していることがわかります。
だからnginxは起動できなかったんですね。

実行中のコンテナを停止する

次に、コンテナをいったん停止して整理しましょう。
以下のコマンドを実行します。

docker compose stop
コマンド説明
docker compose stopcompose.yamlで起動したコンテナをすべて停止します。

実行結果

PS C:\Users\joeac\Desktop\docker\error2> docker compose stop
[+] Stopping 2/2
 ✔ Container error2-apache-1  Stopped                                       1.5s
 ✔ Container error2-nginx-1   Stopped                                       0.0s

Dockerオブジェクトを削除する

不要なコンテナやイメージを削除しておきましょう。
以下のコマンドを実行します。

docker system prune -a

途中で確認メッセージが出たら「y」と入力して進めます。

オプション説明
-a使っていないすべてのイメージを削除します。

これで、環境が再びクリーンな状態になります。

実行結果

PS C:\Users\joeac\Desktop\docker\error2> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y

エラーを修正して再起動!

次に、compose.yamlを修正します。
今度はnginxに別のポート番号(8080)を割り当てましょう。

services:
  apache:
    image: httpd:latest
    ports:
      - "80:80"

  nginx:
    image: nginx:latest
    ports:
      - "8080:80"

保存したら、もう一度起動してみます。

docker compose up -d

すると、今度はエラーも出ずにすべてのコンテナが「Started」になります🎉

実行結果

PS C:\Users\joeac\Desktop\docker\error2> docker compose up -d
[+] Running 14/14
(省略)
[+] Running 3/3
 ✔ Network error2_default     Created                                       0.0s
 ✔ Container error2-nginx-1   Started                                       0.8s
 ✔ Container error2-apache-1  Started                                       0.8s
PS C:\Users\joeac\Desktop\docker\error2>

動作確認

ブラウザを開いて、以下のURLにアクセスしてみましょう。

サービスURL内容
Apachehttp://localhostApacheのトップページが表示されます。
nginxhttp://localhost:8080nginxのトップページが表示されます。

Apacheコンテナへの接続

WebブラウザのURLに「localhost」と入力します。
ApacheコンテナのTOPページが表示されます。

nginxコンテナへの接続

WebブラウザのURLに「localhost:8080」と入力します。
nginxコンテナのTOPページが表示されます。

これで、両方のコンテナが問題なく動作していることが確認できました✨

まとめ

今回のポイントは以下の3つです👇

  1. 同じポート番号は1つのホストで同時に使えない!
  2. どのポートが使われているかは docker container ls で確認できる!
  3. 必要に応じてポート番号をずらす(例:8080:80)!

 慣れてくると、エラーメッセージを見た瞬間に「あ、ポートの取り合いだな」と気づけるようになりますよ😊

これで「ポート番号の重複エラー」の原因と解決方法はバッチリです!
Dockerのエラーは怖くありません。落ち着いて一つずつ確認していけば、
必ずスッキリ解決できますよ👍