UbuntuでDockerポート競合を解決 | address already in use
- 作成日 2026.06.13
- 更新日 2026.06.17
- ubuntu
Dockerコンテナを起動した際に「Bind for 0.0.0.0:80 failed: port is already allocated」や「address already in use」といったエラーが発生することがあります。これはDockerが利用しようとしているポートが、既に他のプロセスやコンテナによって使用されている状態です。本記事では、UbuntuでDockerのポート競合を調査・解決する方法を解説します。
ポート競合とは
Dockerでは以下のようにホストのポートとコンテナのポートを紐付けます。
docker run -d -p 80:80 nginx上記では、Ubuntuの80番ポートをDockerコンテナの80番ポートへ割り当てています。
しかし、既に80番ポートが使用されている場合、コンテナは起動できません。
代表的なエラー例
Bind for 0.0.0.0:80 failed: port is already allocated
Error starting userland proxy:
listen tcp4 0.0.0.0:80: bind: address already in use現在使用中のポートを確認する
まず、どのプロセスがポートを利用しているか確認します。
sudo ss -tulpn特定ポートを確認する場合
sudo ss -tulpn | grep :80実行例
tcp LISTEN 0 511 0.0.0.0:80 users:(("nginx",pid=1234))この例ではNginxが80番ポートを使用しています。
lsofコマンドで確認する
ポート利用プロセスを詳細に調査します。
sudo lsof -i :80実行例
COMMAND PID USER FD TYPE DEVICE NODE NAME
nginx 1234 root 6u IPv4 … TCP *:http (LISTEN)PID(プロセスID)も確認できます。
Dockerコンテナ同士の競合を確認する
既に別のコンテナが同じポートを利用している場合があります。
起動中コンテナ確認
docker ps表示例
CONTAINER ID NAMES PORTS
abc123 web1 0.0.0.0:80->80/tcp80番ポートが既に利用されていることが分かります。
不要なコンテナを停止する
利用していないコンテナを停止します。
docker stop コンテナ名例
docker stop web1停止後に再度起動を試します。
不要であれば削除も可能です。
docker rm コンテナ名別のホストポートを利用する
最も簡単な解決方法です。
例
docker run -d -p 8080:80 nginx意味
・8080:Ubuntu側のポート
・80:コンテナ側のポート
ブラウザアクセス例
http://サーバーIP:8080NginxやApacheを停止する
Webサーバーが競合していることもあります。
Nginx停止
sudo systemctl stop nginxApache停止
sudo systemctl stop apache2状態確認
sudo ss -tulpn | grep :80ポートが解放されていればDockerを起動できます。
Docker Composeのポート設定を変更する
Docker Compose利用時はdocker-compose.ymlを確認します。
競合例
ports:
- "80:80"変更例
ports:
- "8080:80"設定変更後
docker compose up -dまたは
docker-compose up -dを実行します。
停止済みコンテナを確認する
まれに古いコンテナ設定が残っている場合があります。
確認
docker ps -a不要なコンテナ削除
docker rm コンテナID整理することでトラブルを防げます。
Dockerデーモンを再起動する
Docker内部で問題が発生している場合はこちらを試します。
sudo systemctl restart docker状態確認
systemctl status docker再起動後にコンテナ起動を試します。
ファイアウォール設定も確認する
ポート競合ではありませんが、UFWの影響で接続できない場合があります。
確認
sudo ufw status必要に応じて許可します。
例
udo ufw allow 8080/tcp外部から接続できない場合に確認してください。
よくある競合パターン
・NginxとDockerコンテナの80番競合
・ApacheとDockerコンテナの80番競合
・複数のDockerコンテナで同じポートを利用
・Docker Composeの設定重複
・MySQLの3306番競合
・Redisの6379番競合
ポート設計を事前に決めておくことで回避しやすくなります。
参考文献
・Docker公式ドキュメント(Port Publishing and Mapping)
・Docker公式ドキュメント(Docker Compose File Reference)
まとめ
UbuntuでDockerのポート競合が発生した場合は、まず「ss」や「lsof」で対象ポートの利用状況を確認し、DockerコンテナやNginx、Apacheなどの競合プロセスを特定します。
不要なサービスを停止するか、Docker側のホストポートを変更することで多くの問題は解決できます。また、Docker Compose利用時はports設定を見直し、事前にポート設計を行うことで再発防止につながります。
-
前の記事
【完全版】ORA-01017: invalid username/password エラーの原因と対処法|Oracleログイン失敗の全パターン徹底解説 2026.06.12
-
次の記事
Ubuntuで大容量ファイルを調査する方法 | 効率よく調査する方法 2026.06.15
コメントを書く