前提・実現したいこと
DockerでExpressとMySQLの環境を構築しています。
ORMマッパーとして、Prismaを使用しています。
https://www.prisma.io/
以下のコードで、Prismaのマイグレーションを行ったのですがエラーが発生します。
npx prisma migrate dev --name init
発生している問題・エラーメッセージ
エラーメッセージ
https://www.prisma.io/docs/reference/api-reference/error-reference#p1001
❯ docker-compose exec app ash /node # npx prisma migrate dev --name init Prisma schema loaded from prisma/schema.prisma Datasource "db": MySQL database "Nuxt-Express-TypeScript" at "db:6306" Error: P1001: Can't reach database server at `db`:`6306` Please make sure your database server is running at `db`:`6306`.
該当のソースコード
docker-compose.yml
yml:
1version: '3.8' 2 3volumes: 4 db-data: 5 6services: 7 # MySQL 8 db: 9 image: mysql:5.7 10 environment: 11 MYSQL_DATABASE: $MYSQL_DATABASE 12 MYSQL_ROOT_PASSWORD: $MYSQL_ROOT_PASSWORD 13 TZ: $TZ 14 volumes: 15 - db-data:/var/lib/mysql 16 - db-data:/etc/mysql/conf.d/my.cnf 17 ports: 18 - $DB_PORT:3306 19 20 #【backend】Express 21 app: 22 build: 23 context: ./docker/app 24 environment: 25 TZ: $TZ 26 DEBUG: $BACKEND_DEBUG 27 DATABASE_URL: $BACKEND_DATABASE_URL 28 tty: true 29 ports: 30 - $BACKEND_PORT:18080 31 restart: always 32 volumes: 33 - $BACKEND_DIR:$BACKEND_WORK_DIR 34 working_dir: $BACKEND_WORK_DIR 35 command: [sh, -c, npm install && npm run build && npm run start]
.env
# mysql DB_PORT = "6306" # backend BACKEND_PORT = "18080" # frontend FRONT_PORT = "3000" STORYBOOK_PORT = "6006" # Dockerfile <mysql> MYSQL_DATABASE = "Nuxt-Express-TypeScript" MYSQL_ROOT_PASSWORD = "password" TZ = "Asia/Tokyo" # Dockerfile <backend> BACKEND_DIR = "./api" BACKEND_WORK_DIR = "/node" BACKEND_DEBUG = "api:*" BACKEND_DATABASE_URL = "mysql://root:password@db:6306/Nuxt-Express-TypeScript"
Dockerfile <app>
FROM node:14.15.3-alpine WORKDIR /node RUN apk update && apk add bash COPY package*.json ./ RUN npm install EXPOSE 18080 CMD npm run build && npm run start
prisma/schema.prisma
datasource db { provider = "mysql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } model User { id Int @id @default(autoincrement()) name String email String @unique }
試したこと
Sequel ProでDBにアクセスできるかどうか確認
接続確認しました。
無事接続でき、Nuxt-Express-TypeScript
というDBが作成できていることが確認できました。
DBのホスト名を変更
今回のエラーは、DBへの接続が出来ていないというものかと思います。
なので、今回はホスト名がlocalhostではなく、dbになると思うので、そこの修正を行いました。
(修正前) mysql://root:password@localhost:6306/Nuxt-Express-TypeScript
↓
(修正後) mysql://root:password@db:6306/Nuxt-Express-TypeScript
修正前も修正後もどちらもマイグレーションに失敗しました。
どこに問題があり、エラーが発生するかが分からないのでお教えいただけますと幸いです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー