Dockerでコンテナを起動しようとしたとき、次のようなエラーメッセージに遭遇したことはありませんか?
(HTTP code 500) server error - failed to set up container networking:
driver failed programming external connectivity on endpoint my-nginx (...):
Bind for 0.0.0.0:8080 failed: port is already allocated
このエラーメッセージは一見複雑に見えますが、中身はシンプル。
「ポートが既に使われている(=重複してバインドできない)」というネットワーク設定エラーです。
この記事では、このエラーが発生する原因と具体的な対処方法をわかりやすく解説します。
エラーの意味を理解する
Bind for 0.0.0.0:8080 failed: port is already allocated
この部分が重要です。
Dockerがコンテナのポートをホストの8080
ポートにバインドしようとしましたが、すでに他のプロセスがこのポートを使用しているため失敗したという意味です。
主な原因

原因①:同じポートを使う別のDockerコンテナが既に起動中
例えば、すでにdocker run -p 8080:80 nginx
のようなコマンドでコンテナを起動している状態で、同じポート設定の別コンテナを起動しようとするとこのエラーが発生します。
原因②:Docker以外のアプリケーション(Apache、Node.jsなど)がポートを使用中
ローカルPCで別のウェブサーバーやアプリケーションが8080
ポートを使っている場合も同様のエラーが発生します。
対処法①:使用中のポートを確認する

▼ Linux / macOS の場合:
sudo lsof -i :8080
▼ Windows の場合(コマンドプロンプト):
netstat -ano | findstr :8080
これらのコマンドで、どのプロセスがポート8080を使用しているかを特定できます。
特定したら対処法②に移ります。
対処法②:不要なプロセスやコンテナを停止する
▼ Dockerコンテナが使っている場合:
まず実行中のコンテナを確認します:
docker ps
該当するコンテナを見つけたら停止します:
docker stop コンテナ名またはID
必要に応じて、コンテナを削除することもできます:
docker rm コンテナ名またはID
対処法③:別のポート番号を使う
8080
ポートを必ず使う必要がない場合は、別の未使用ポート(例:8081, 8888など)を指定するのが最も簡単な解決策です。
docker run -p 8081:80 nginx
これにより、コンテナ内の80番ポートをホストの8081番ポートにマッピングします。
応用:利用可能なポートを確認する方法

ポートの使用状況を一覧で確認したい場合は、以下のコマンドが役立ちます。
▼ Linux/macOS:
sudo netstat -tuln | grep LISTEN
▼ Windows:
netstat -aon | findstr LISTENING
まとめ|「port is already allocated」エラーは冷静に対処しよう
Dockerのポート競合エラーは開発やテスト中によく発生しますが、確認と対応の手順を知っていれば簡単に解決できます。
対処ポイントまとめ:
lsof
やnetstat
コマンドで使用中のポートを確認する- 不要なコンテナやアプリケーションを停止または削除する
- 別のポート番号を使用して起動し直す
同じポートを複数のサービスで同時に使用できないという制約はありますが、少しの工夫で問題を回避できます。
エラーメッセージに慌てず、順序立てて対処していきましょう!
コメント