Dockerでコンテナを起動しようとしたときに、
- コンテナが起動しない
- エラーが表示される
port is already allocatedと出る
といった経験はありませんか。
これは、
Dockerで指定したポートがすでに別のプロセスに使われている
いわゆる ポート競合エラー です。
この記事では、
Dockerでポート競合エラーが出る原因と、Macでの確認方法・対処法を
初心者向けに分かりやすく解説します。
※ 本記事は Mac環境(Docker Desktop)を前提 に説明します。
この記事でわかること
- Dockerでポート競合が起こる理由
- エラーメッセージの意味
- 使用中ポートの確認方法
- 安全な対処手順
よくあるエラーメッセージ
Dockerでポート競合が起こると、
次のようなメッセージが表示されることがあります。
bind: address already in use
port is already allocated
これは、
指定したポート番号がすでに使われている
ことを意味します。
原因① すでに別のアプリが同じポートを使っている
Macでは、
次のようなアプリがポートを使用していることがあります。
- Webサーバー(Apache / Nginx)
- 別のDockerコンテナ
- ローカル開発サーバー
- VS Codeの拡張機能
この状態で同じポートを指定すると、
Dockerは起動できません。
原因② 以前起動したDockerコンテナが残っている
一度起動したDockerコンテナが、
- 停止していない
- バックグラウンドで動いている
場合も、
ポート競合が発生します。
確認① 使用中のポートを確認する(Mac)
まず、
どのプロセスがポートを使っているかを確認します。
例:ポート8080の場合
lsof -i :8080
ここで表示されるプロセスが、
そのポートを使用しています。
確認② 起動中のDockerコンテナを確認する
Dockerコンテナが原因かどうかを確認します。
docker ps
起動中のコンテナが表示されたら、
そのコンテナがポートを占有している可能性があります。
対処法① 不要なコンテナを停止する
不要なDockerコンテナがあれば、
停止します。
docker stop コンテナID
これでポート競合が解消されることがあります。
対処法② ポート番号を変更する
開発用途であれば、
ポート番号を変更するのが最も安全です。
例:
8080 → 8081
Docker Composeや docker run の
ポート指定を変更してください。
対処法③ 使用中のアプリを停止する
Docker以外のアプリが原因の場合は、
- ローカルサーバーを停止
- 不要なアプリを終了
することで解決できます。
やってはいけない対処法
ポート競合時に、
次のような対応はおすすめしません。
- 無理に強制終了を繰り返す
- どのプロセスか分からないままkillする
- 原因を確認せずポートを固定する
必ず、
どのプロセスが使っているかを確認してから対処しましょう。
よくある勘違い
ポート競合エラーで、
次のような誤解が多いです。
- Dockerが壊れていると思ってしまう
- コンテナ設定が間違っていると思う
- 再インストールしようとする
実際には、
ポートが使われているだけのケースがほとんどです。
まず確認すべきチェックリスト
Dockerでポート競合が出たら、
次の順番で確認してください。
- エラーメッセージに出ているポート番号
lsof -i :ポート番号docker psで起動中コンテナ確認- 不要なコンテナ・アプリを停止
- ポート番号を変更する
この順で確認すれば、
ほとんどのケースは解決します。
まとめ
Dockerでポート競合エラーが出る原因は、
- すでに同じポートが使われている
- 起動中のDockerコンテナがある
- 別アプリがポートを占有している
といった 環境上の問題 です。
落ち着いて使用中ポートを確認すれば、
安全に解決できます。
コメントを残す