0
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?

Error: P1001: Can't reach database server at

Last updated at Posted at 2025-01-26

はじめに

Prisma と Supabase を組み合わせた Next.js プロジェクトを Docker 環境で構築している中で、データベース接続に失敗する問題に直面しました。
本記事では、その問題の詳細と解消方法についてまとめます。同じ課題に直面している方の参考になれば幸いです。

環境

  • フレームワーク: Next.js 13
  • ORM: Prisma
  • データベース: Supabase PostgreSQL
  • コンテナ: Docker
  • エラー発生時の Prisma コマンド:
npx prisma migrate dev --name init
.env
DATABASE_URL="postgresql://postgres:[YOUR-PASSWORD]@db.xxx.supabase.co:5432/postgrest"

問題

以下のエラーが発生し、Prisma が Supabase のデータベースに接続できませんでした。

Error: P1001: Can't reach database server at `db.xxx.supabase.co:5432`
Please make sure your database server is running at `db.xxx.supabase.co:5432`.

また、ping コマンドを使った接続確認では以下のように IPv6 アドレスのみが解決され、接続に失敗する状況でした。

root@react:/usr/src/app/src# nslookup db.xxx.supabase.co
Server:         127.0.0.11
Address:        127.0.0.11#53

Non-authoritative answer:
Name:   db.xxx.supabase.co
Address: 2406:da14:271:9903:fec7:75fa:9c8:82ef

やったこと

以下の記事を参考にして、さまざまな方法で問題解決を試みました。

  • Supabaseのプロジェクトを再起動 (ref)
  • PostgresDBコンテナの削除 (ref)
  • DBのパスワードで文字列のみを使用(ref)

解消方法

最終的に、Supabase の接続設定を以下のように変更することで問題が解決しました。

Supabase の「Session Pooler」を使用し、IPv4 接続を強制するようにしました。

DATABASE_URL="postgresql://postgres.xxx:[YOUR-PASSWORD]@aws-0-ap-northeast-1.pooler.supabase.com:5432/postgres"

この設定を .env ファイルに記載し、以下の Prisma コマンドを実行して接続テストを行ったところ、正常に動作しました。

npx prisma migrate dev --name init

結果として、データベースへのマイグレーションが成功しました。

今回の原因

この問題は、Docker環境ではデフォルトでIPv4を使用しているが、
Supabaseの接続先アドレスをIPv6のもので設定していたことが原因でした。
参考記事

なので、Dockerで.envの内容は変えずに、
IPv6通信を有効化する方法でも解消できるかもしれません。


本記事が同様の問題に直面している方々の助けになれば幸いです。コメントやフィードバックがあれば、ぜひお寄せください!

0
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
0
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?