laravelをインストールする前段階docker-compose upでコンテナを起動させたかったが出来なかった
ある学習教材をベースにlaravelの学習を進めていて、PostgreSQLを使ってコンテナを起動させる内容だったのですが、上手く起動しなかったのでエラー解決に至るまでの備忘録です。
実際に行ったコマンド
docker-compose up -d workspace php-fpm nginx postgres
up以降はオプションになってますが、最後についているpostgresが今回の話になります
無事にコンテナが起動されれば、
Creating laravel-sns_docker-in-docker_1 ... done
Creating laravel-sns_workspace_1 ... done
Creating laravel-sns_php-fpm_1 ... done
Creating laravel-sns_nginx_1 ... done
Creating laravel-sns_porstgres_1 ... done
この様に出るはずなのですが、私の場合は
Recreating laravel-sns_postgres_1 ... error
Creating laravel-sns_docker-in-docker_1 ... done
Creating laravel-sns_workspace_1 ... done
Creating laravel-sns_php-fpm_1 ... done
Creating laravel-sns_nginx_1 ... done
ERROR: for laravel-sns_postgres_1 Cannot start service postgres: Ports are not available: listen tcp 0.0.0.0:5432: bind: address already in use
こんな感じになってしまいました。
原因
数ヶ月前に、今よりもっと何も解っていない時期にインストールしていたpostgresだと言う事がわかりました。
当時、MySQL以外のDBを使いたいと言う気持ちから特に何も考えずにインストールしていたpostgresの存在を思い出し、pgadminから接続状態を見たら、今回のエラー内容に出ているポート番号5432が接続状態になっていました。
※エラー解決する前に画面を残すのを忘れてしまってました。
解決に向けた道筋を考える
今回はとある教材の学習中で起きたエラーでしたので、講師の方に相談した所、
・Ports are not available
・address already in use
辺りをキーワードに検索をしてみれば?と言うアドバイスを頂いたので、
Ports are not available→ポートが利用できない
address already in use→アドレスは既に使われている
と、ほぼ直訳の解釈を元に、検索をかけてこれかと思えるヒントを見付けました。
参考にさせてもらった記事
https://mebee.info/2020/04/20/post-7968/
これを元にポート番号5432を使用しているプロセスをkillすればいけるのかな?と思い早速実行
sudo lsof -i -P | grep 5432
pgAdmin4 2471 --------- 21u IPv6 --------- 0t0 TCP localhost:64447->localhost:5432 (CLOSE_WAIT)
※アカウント名やトークンはーーで伏せさせてもらってます。
これでプロセス番号が2471だった事が解ったので、
kill 2471
でkillコマンドを実行
再度コンテナを起動
docker-compose up -d workspace php-fpm nginx postgres
起動済みのコンテナは省略
Starting 8d38216de390_laravel-sns_postgres_1 ... done
無事にpostgresも起動できました。
思えば当時インストールだけして、全く使っていなかったpostgresがずっとサーバーと接続済みだったんだな〜と言う事を思い知らされました。
無知の状態であれこれインストールする恐ろしさを知った反面、当時はkillコマンドとかも全く解っていなかったので、時間が立つ事で解決できる事もあるんだなと言う学びにもなりました。
めっちゃしょーもない内容ですが、もし1人でも同じ境遇の方がいて、何かのお役に立つかも知れません。