1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

password authentication failed for user "postgres"が出た時の対処法

1
Posted at

はじめに

Dockerを使ってアプリ開発をしようと思い、手探りで学んでいる中で遭遇したエラーの解決方法を備忘録として残します。

開発環境

  • Java 17
  • Spring Boot 3系
  • PostgreSQL
  • Docker

発生したエラー

FATAL: password authentication failed for user "postgres"

Docker公式ドキュメントを見ると、同様の事例が紹介されていました。

コンテナを異なるパスワードで一度実行し、その後別のパスワードで再起動した場合、既存のデータベースは既に初期化されているため更新されません。古いボリュームを削除するか、別のボリュームを使用してください。

つまり:

  • 初回起動時にDBが初期化される
  • その後 POSTGRES_PASSWORD を変更しても反映されない
  • なぜならデータはvolumeに保持されているから

そのため、古いvolumeを削除しました。

$ docker volume rm <your-volume-name>

しかし、再度コンテナを立ち上げても同じエラーが発生しました。

自分が直面した原因は ポート競合 でした。

ローカル環境(Mac)で既にPostgreSQLが 5432 番ポートを使用していました。

Spring Bootの接続設定は以下のようになっていました。

application.poroperties
spring.datasource.url=jdbc:postgresql://localhost:5432/POSTGRES_DB

たびたび、ローカルのポート番号とDockerのポート番号が等しい時があるため、それを何も深掘りせず参考にしたためエラーが起こりました。

この場合、localhost が指しているのは
Dockerコンテナ内のPostgreSQLではなくMac上で動いているPostgreSQL
つまり、SpringはDockerではなくローカルDBに接続していたのです。

そのため、パスワード不一致で認証エラーが発生していました。


解決方法

docker-compose.yml のポートを変更しました。

docker-compose.yaml
ports:
  - "55432:5432"

これは以下の意味になります。

Macの55432 → Docker内の5432

そしてSpring側も変更。

application.poroperties
spring.datasource.url=jdbc:postgresql://localhost:55432/POSTGRES_DB

これでDocker内のPostgreSQLに正しく接続できるようになりました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?