Docker上でpostgresのコンテナを建てる
PostgreSQLをインストール済みのMacbook Proにて、Rancher Desktopを用いてdockerコンテナ上にpostgresのDBサーバーを建てようとした。
$ docker run -d --name postgres_postgresdb -e POSTGRES_USER=user -e POSTGRES_PASSWORD=pass -e POSTGRES_DATABASE=postgresdb -e POSTGRES_INITDB_ARGS="--encoding=UTF-8" -p 5432:5432 postgres
上のコマンドを実行した結果、正常にdockerコンテナが作成されたのを$ docker ps
にて確認した。
じゃあ中に入ってみるか。
$ psql postgres://user:pass@localhost:5432/postgresdb
でDBにアクセスすると、以下のエラーが出た。
psql: エラー: "localhost"(127.0.0.1)、ポート5432のサーバーへの接続に失敗しました: FATAL: role "user" does not exist
あれ?dockerコマンドの引数でuserを指定したよな…
POSTGRES_USER
じゃなくてPG_USER
だったっけ?と思って変えてみたけど結果は同じ。
何も考えずにおかしな方向へfixを試みる
エラーコードでググってみたらuser追加しろとかDB追加しろとか言われた
ググった結果出てきたやつ:
https://stackoverflow.com/questions/15301826/psql-fatal-role-postgres-does-not-exist
https://stackoverflow.com/questions/17633422/psql-fatal-database-user-does-not-exist
$ /opt/homebrew/Cellar/postgresql@15/createuser -s user
注意
createuserの存在するディレクトリは、postgresのインストール方法やバージョンにより異なる。
上のコマンドを使ってuser作成を行う場合は$ which postgres
などを用いてインストールディレクトリを確認すること。
何も考えずにコマンドを実行…
見かけ上は接続できて喜んでたけど
このあたりで「これってローカルで建ってるサーバーに対して操作行ってるじゃん」と気づく。
試しに$ docker rm -f postgres_postgresdb
したら、コンテナを終了・削除しているのにDBへ接続できてしまった。
原因:思考停止
結局のところ、homebrew経由でpostgresが実行されていたため、ローカルですでにpostgresのDBサーバーが建っていた。
$ brew services list
Name Status User File
postgresql@15 started user ~/Library/LaunchAgents/homebrew.mxcl.postgresql@15.plist
$ brew services stop postgres
した結果、dockerのコンテナで建ってるpostgresに無事アクセスできた。最初の$ docker run -d [なんたら]
コマンドは何も間違ってなかった。
ローカルでサーバーが建っているって感覚なかったなぁ…。
言われてみりゃその通りだが…。
そしてpostgresDBをローカルで建てるためにいらんコンピュータリソースを使ってたんだなぁと恥ずかしくなった。