質問するログイン新規登録

Q&A

0回答

2751閲覧

DockerでPrismaのマイグレーションが実行できない

RyoS_

総合スコア4

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/08/25 11:31

編集2021/08/26 05:28

0

0

前提・実現したいこと

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

修正前も修正後もどちらもマイグレーションに失敗しました。

どこに問題があり、エラーが発生するかが分からないのでお教えいただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問