UbuntuでDocker起動時にポート競合した時の解決方法
- 作成日 2026.06.01
- その他
Dockerコンテナを起動した際に「port is already allocated」や「bind: address already in use」などのエラーが発生する場合、ホスト側で同じポートが既に使用されています。特にWebサーバー、データベース、他のDockerコンテナとの競合が原因になることが多くあります。ここではUbuntu環境でDockerのポート競合を確認・解消する方法を詳しく解説します。
ポート競合時によく表示されるエラー
Docker起動時に以下のようなメッセージが表示されます。
docker: Error response from daemon:
driver failed programming external connectivity.
Bind for 0.0.0.0:80 failed:
port is already allocatedまたは
Error starting userland proxy:
listen tcp4 0.0.0.0:8080:
bind: address already in useこれは指定したポートを別のプロセスが既に利用している状態です。
どのポートが競合しているか確認する
まずDocker起動時のエラーメッセージから対象ポートを確認します。
例えば以下の場合。
-p 8080:80ホスト側の8080番ポートが競合しています。
現在利用中のポートを確認します。
sudo ss -tulpn | grep 8080または
sudo lsof -i :8080実行例。
tcp LISTEN 0 128 0.0.0.0:8080
users:(("nginx",pid=1234))この場合はnginxが8080番を使用しています。
競合プロセスを特定する
PIDを確認します。
sudo lsof -i :8080出力例。
COMMAND PID USER
nginx 1234 root詳細確認。
ps -fp 1234実行中サービスを特定できます。
不要なサービスを停止する
競合しているサービスが不要であれば停止します。
Nginxの場合。
sudo systemctl stop nginxApacheの場合。
sudo systemctl stop apache2MySQLの場合。
sudo systemctl stop mysql停止後に再確認。
sudo ss -tulpn | grep 8080表示されなければポートが解放されています。
Dockerコンテナ同士の競合を確認する
別のコンテナが同じポートを使用している場合があります。
稼働中コンテナ確認。
docker ps出力例。
0.0.0.0:8080->80/tcp8080番ポートを既に利用しています。
停止する場合。
docker stop コンテナ名削除する場合。
docker rm コンテナ名使用ポートを変更する
最も簡単な解決方法です。
例えば8080番が使用中の場合。
変更前。
docker run -d -p 8080:80 nginx変更後。
docker run -d -p 8081:80 nginxブラウザアクセス先も変更します。
http://サーバーIP:8081docker-compose利用時の修正方法
docker-compose.ymlで指定しているポートを変更します。
変更前。
services:
web:
ports:
- "8080:80"変更後。
services:
web:
ports:
- "8081:80"反映。
docker compose down
docker compose up -d全ポート利用状況を確認する
現在のリッスンポートを一覧表示します。
sudo ss -tulpnまたは
sudo netstat -tulpnよく競合するポート。
・80(HTTP)
・443(HTTPS)
・3306(MySQL)
・5432(PostgreSQL)
・6379(Redis)
・8080(Webアプリ)
・9200(Elasticsearch)
Docker導入前に確認しておくとトラブルを防げます。
Dockerが占有しているポートを確認する
Docker全体のポート利用状況。
docker ps --format "table {{.Names}}\t{{.Ports}}"出力例。
NAMES PORTS
nginx-app 0.0.0.0:8080->80/tcp
mysql-db 0.0.0.0:3306->3306/tcpどのコンテナがどのポートを使っているか一目で確認できます。
不要なDockerコンテナを削除する
停止済みコンテナを整理します。
docker container prune未使用ネットワークも削除。
docker network prune全体クリーンアップ。
docker system prune不要なリソースが原因のトラブルを防げます。
Dockerサービスを再起動する
ポート解放後も正常に起動しない場合はDockerサービスを再起動します。
sudo systemctl restart docker状態確認。
sudo systemctl status dockeractive (running)になっていれば正常です。
本番環境で注意すべきポイント
本番サーバーでは80番や443番をNginxやApacheが利用していることが一般的です。
そのため以下の構成が推奨されます。
・Nginx → 80/443
・Dockerアプリ → 8080、3000、5000など
・リバースプロキシ経由で公開
例。
docker run -d -p 3000:3000 myappNginxから3000番へ転送することでポート競合を回避できます。
まとめ
Dockerのポート競合エラーは、同じホストポートを別のプロセスやコンテナが利用していることが原因です。
確認手順は以下の順番が効率的です。
・エラーメッセージから競合ポートを確認
・ssやlsofで使用中プロセスを調査
・docker psで他コンテナを確認
・不要サービスを停止
・ポート番号を変更
・Dockerサービスを再起動
特に「sudo ss -tulpn」と「docker ps」を確認すると、多くのポート競合問題を短時間で解決できます。
-
前の記事
Claude Codeでsystemd設定ファイルを作成する方法 2026.05.29
-
次の記事
UbuntuでNginxが起動しない時の確認項目まとめ 2026.06.02
コメントを書く