Oteto Blogのロゴ

【Prisma】migrate devが「Can't reach database server」とエラーになる

Error: P1001: Can't reach database server at `localhost`:`3306`

Prismaでnpx prisma migrate dev --name initしようとすると、上記のエラーになった。

前提

version: '3.8'
services:
  app:
    container_name: app-container
    ports:
      - '3000:3000'
      - '5555:5555'
    ...
      
  db:
    container_name: db-container
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_ROOT_PASSWORD: pw
    ports:
      - '3306:3306'
    ...

Dockerでappコンテナ(NestJs)とdbコンテナ(MySQL)を立てており、appコンテナ内でマイグレーションを実行しようとした。

解決法

datasource db {
  provider = "mysql"
  url      = "mysql://root:pw@localhost:3306/mydb"
  url      = "mysql://root:pw@db:3306/mydb"
}

Prismaから接続するDATABASE_URLのホスト名をlocalhostからサービス名(db)に修正する。

というのもappコンテナからするとlocalhostは自身になってしまいエラー文の通りDBサーバーに接続できないため、dbコンテナを指定する必要がある。