#前提と環境
私は素人です。
今回見舞われたエラーについて調べましたが、自分と同じ状況の人が見つからなかったので記事に残します。
Windows10homeでDocker for Windowsを使っています。
dockerで開発環境を作り、コンテナの最初の起動時にエラーが出ました。
#つまづいたこと
$docker-compose up -d
でコンテナを起動しようとしました。
$ docker-compose up -d
Creating network "learning-laravel-tdd_default" with the default driver
Creating learning-laravel-tdd_db-testing_1 ...
Creating learning-laravel-tdd_app_1 ...
Creating learning-laravel-tdd_db_1 ... error
Creating learning-laravel-tdd_db-testing_1 ... done
Creating learning-laravel-tdd_app_1 ... done
ocol/network address/port) is normally permitted.
Creating learning-laravel-tdd_web_1 ... done
ERROR: for db Cannot start service db: Ports are not available: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
ERROR: Encountered errors while bringing up the project.
するとエラーに。
どうやらポート番号3306に何か問題があってdbコンテナを起動できないみたいです。
とりあえずCannot start service db: Ports are not available
というエラー文を調べてみました。
似たようなエラーは多かったですが私の場合はOnly one usage of each socket address
となっている箇所がaddress already in use
の人が多く微妙に違うみたいです。
でもおそらくポート番号3306が他のプログラムと被っているのだろうと思いその線で試行錯誤することにしました。
#やってみたこと
$docker-compose down
で1度コンテナを停止。
$netstat -ano | findstr ":3306"
を実行しポート番号3306でリッスンしているプロセスを調べました。
$ netstat -ano | findstr ":3306"
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 5464
TCP 0.0.0.0:33060 0.0.0.0:0 LISTENING 5464
TCP [::]:3306 [::]:0 LISTENING 5464
TCP [::]:33060 [::]:0 LISTENING 5464
結果PIDが5464のプロセスが怪しいとわかりました。
そこでtasklist
コマンドでPIDが5464のプロセスが何か調べました。
tasklist /FI "PID eq 5464"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
mysqld.exe 5464 Services 0 44,404 K
どうやらこのmysqld.exe
が干渉しているみたいです。
#mysqld.exeって何ですか?
調べました。
調べたんですが、
拡張子.exeはexecutable(実行可能)という意味らしい。
ってことしかよくわかりませんでした。
#とりあえず止めてみた
タスクマネージャーから「タスクの終了」を選択。
もう1度$docker-compose up -d
コマンドを実行。
$ docker-compose up -d
Creating network "learning-laravel-tdd_default" with the default driver
Creating learning-laravel-tdd_app_1 ... done
Creating learning-laravel-tdd_db-testing_1 ...
Creating learning-laravel-tdd_db_1 ... done
Creating learning-laravel-tdd_web_1 ... done
、、、いけたな。
#なんとも腑に落ちない
表面は問題がなくなったけど、mysqld.exeって何のアプリのために動いてたのか、止めちゃって良かったのか、、、
全然すっきりしない。
かと言ってこれ以上深追いする気力と体力がないので時間に解決してもらうことにします。