できない.dev

Prisma で「Can't reach database server」(P1001)が解決できない

P1001 Can't reach database server は、Prisma がデータベースに接続できないときに出る。
DB の起動状態とホスト・ポート・認証情報、接続 URL を確認すれば解消する。

#prisma#connection#p1001

公開: 更新:

要約

P1001: Can't reach database server at {host}:{port} は、Prisma が指定したホストとポートのデータベースに到達できないときに出る。

これは PrismaClientInitializationError として投げられ、接続が確立できないことを示す(公式: Error Reference)。

DB の起動状態、接続 URL のホスト・ポート・認証情報を順に確認すれば切り分けられる。

よくある原因

  1. データベースサーバーが起動していない、またはポートが違う。
  2. DATABASE_URL のホスト名・ポート・認証情報が誤っている。
  3. Docker で localhost を指しているが、コンテナ間では service 名で解決する必要がある。
  4. ファイアウォールや SSL 要件で接続がブロックされている。

解決策

1. DB の起動とポートを確認する

# 例: PostgreSQL がポート 5432 で待ち受けているか
pg_isready -h localhost -p 5432

2. DATABASE_URL を見直す

DATABASE_URL="postgresql://user:pass@HOST:PORT/db?schema=public"

P1001host:port に到達できないことを示すので、まず接続先の値が正しいかを確認する。

3. Docker Compose では service 名で接続する

# localhost ではなく compose の service 名を使う
DATABASE_URL="postgresql://user:pass@db:5432/app"

別コンテナの DB へは localhost ではなく Compose のサービス名で名前解決する。

この記事は役立ちましたか?