このページで解説している内容は、以下の 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.yamlVSCodeが起動したら、次の内容を入力して保存しましょう。
services:
apache:
image: httpd:latest
ports:
- "80:80"
nginx:
image: nginx:latest
ports:
- "80:80"この状態では、Apacheとnginxの両方が80番ポートを使う設定になっています。
これが、今回の“ポート番号重複エラー”の原因です。
コンテナを起動してみる
では、実際に起動してみましょう。
docker compose up -dDockerが両方のコンテナを作成しようとしますが、
しばらくすると次のようなエラーが出ます👇
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 stop | compose.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.0sDockerオブジェクトを削除する
不要なコンテナやイメージを削除しておきましょう。
以下のコマンドを実行します。
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 | 内容 |
|---|---|---|
| Apache | http://localhost | Apacheのトップページが表示されます。 |
| nginx | http://localhost:8080 | nginxのトップページが表示されます。 |
Apacheコンテナへの接続
WebブラウザのURLに「localhost」と入力します。
ApacheコンテナのTOPページが表示されます。

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

これで、両方のコンテナが問題なく動作していることが確認できました✨
まとめ
今回のポイントは以下の3つです👇
- 同じポート番号は1つのホストで同時に使えない!
- どのポートが使われているかは docker container ls で確認できる!
- 必要に応じてポート番号をずらす(例:8080:80)!
慣れてくると、エラーメッセージを見た瞬間に「あ、ポートの取り合いだな」と気づけるようになりますよ😊
これで「ポート番号の重複エラー」の原因と解決方法はバッチリです!
Dockerのエラーは怖くありません。落ち着いて一つずつ確認していけば、
必ずスッキリ解決できますよ👍
