目次:クリックでジャンプ
エラー概要
Docker Compose を使用してコンテナを起動しようとした際に、以下のエラーが発生した。
PS C:\projects\calendar> docker-compose up -d [+] Running 2/3 ✔ Container phpmyadmin Created 0.1s ✔ Container calendar_app Started 0.7s - Container calendar_db Starting 0.7s Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
これは、MySQLコンテナが使用しようとしている ポート3306 が既に別のプロセスによって使用されているため発生してる。
ポートの使用状況を確認する
エラーの原因を特定するために、3306ポート の使用状況を確認。
1. netstat コマンドでポートの使用状況を確認
PS C:\projects\calendar> netstat -ano | findstr ":3306"
出力結果:
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 16736 TCP 0.0.0.0:33060 0.0.0.0:0 LISTENING 16736 TCP [::]:3306 [::]:0 LISTENING 16736 TCP [::]:33060 [::]:0 LISTENING 16736
ポート 3306 を PID 16736 のプロセスが使用していることが分かる。
2. tasklist コマンドでプロセスを特定
tasklist /FI "PID eq 16736"
出力結果:
イメージ名 PID セッション名 セッション# メモリ使用量 ========================= ======== ================ =========== ============ mysqld.exe 16736 Console 1 1,752 K
mysqld.exe (MySQL サーバー) が ポート3306 を使用していることが判明。
解決策
タスクマネージャーから mysqld.exe を終了
結果
ポート競合の問題を解決し、docker-compose up -d を実行すると、全てのコンテナが正常に起動。
PS C:\projects\calendar> docker-compose up -d [+] Running 3/3 ✔ Container calendar_app Running 0.0s ✔ Container calendar_db Started 0.4s ✔ Container phpmyadmin Started
まとめ
- ポート競合エラー は、ホストマシンで既に使用されているポートをコンテナが使用しようとすると発生する。
- netstat -ano | findstr ":3306" で使用中のプロセスを特定する。
- tasklist /FI "PID eq
" でプロセス名を確認する。 - 必要に応じて docker-compose down** → **docker-compose up -d でコンテナを再起動する。