【发布时间】:2022-11-18 12:25:21
【问题描述】:
我正在尝试使用 docker-compose 来运行一个包含两个 Docker 容器、MySQL 和 NodeJS 的项目。我在从后端容器连接到 SQL 容器时遇到问题。我的后端容器使用 Prisma 作为 ORM,并在运行 npx prisma migrate dev 时(在 docker-compose up 期间)向我显示以下错误。
Error: P1001: Can't reach database server at `mysql`:`3306`
Please make sure your database server is running at `mysql`:`3306`.
经过一些研究,我认为问题出在我的数据库 url 上。主机名应该与数据库容器名称(在本例中为 mysql)相匹配,所以我更新了它,但仍然没有成功。
DATABASE_URL=mysql://root:root@mysql:3306/myshowlist # .env file
我还尝试了容器服务名称 (db),但也不是。
DATABASE_URL=mysql://root:root@db:3306/myshowlist # .env file
我感到困惑的是,当我的 Prisma 不在容器内运行时,它连接到 MySQL 容器没有问题。当我单独启动 MySQL 容器并运行 Prisma migrate 命令时,它可以正常工作,我可以像平常一样使用后端服务并从数据库中保存/读取。我确实必须使用 localhost 作为主机名,但这是有道理的。
我不确定可能是什么问题,我真的很感激朝着正确的方向轻推!
docker-compose.yml:
version: "3.8"
services:
api:
build:
context: ./api-old
ports:
- "5001:3200"
container_name: api
depends_on:
- db
db:
image: mysql:5.7
restart: always
container_name: mysql
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: myshowlist
MYSQL_ROOT_PASSWORD: "root"
./api-old/Dockerfile:
FROM node:latest
WORKDIR /usr/src/app
COPY package*.json ./
COPY .env ./
COPY prisma ./prisma/
RUN npm ci
RUN npm run db-prod
COPY . .
EXPOSE 5001
CMD ["npm", "start"]
架构.棱镜:
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
【问题讨论】:
标签: mysql node.js docker prisma