Help us understand the problem. What is going on with this article?

docker-compose upでpostgresが起動しなかったのでエラーを解決するに至った話

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人でも同じ境遇の方がいて、何かのお役に立つかも知れません。

megukentarou
エンジニア転職を目指して独学とプログラミングスクール(卒業)でプログラミング学習をしてます。 1年後の目標 自分が本当に作りたかったアプリを作れるレベルになる。そして作る。 3年後の目標 レベルアップしたスキルを持つ事で今よりもっと視野を広げて、作りたいアプリをさらに沢山作れる様になる。そして作りまくる。 現在PHP(laravel)を独学でアプリ作成中です。
https://www.meguken-portfoilo.website/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away