UbuntuでDockerポート競合を解決 | address already in use

  • 作成日 2026.06.13
  • 更新日 2026.06.17
  • ubuntu
UbuntuでDockerポート競合を解決 | address already in use

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/tcp

80番ポートが既に利用されていることが分かります。

不要なコンテナを停止する

利用していないコンテナを停止します。

docker stop コンテナ名

docker stop web1

停止後に再度起動を試します。

不要であれば削除も可能です。

docker rm コンテナ名

別のホストポートを利用する

最も簡単な解決方法です。

docker run -d -p 8080:80 nginx

意味

・8080:Ubuntu側のポート

・80:コンテナ側のポート

ブラウザアクセス例

http://サーバーIP:8080

NginxやApacheを停止する

Webサーバーが競合していることもあります。

Nginx停止

sudo systemctl stop nginx

Apache停止

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 run)

Docker公式ドキュメント(docker ps)

Docker公式ドキュメント(Docker Compose File Reference)

まとめ

UbuntuでDockerのポート競合が発生した場合は、まず「ss」や「lsof」で対象ポートの利用状況を確認し、DockerコンテナやNginx、Apacheなどの競合プロセスを特定します。

不要なサービスを停止するか、Docker側のホストポートを変更することで多くの問題は解決できます。また、Docker Compose利用時はports設定を見直し、事前にポート設計を行うことで再発防止につながります。