【问题标题】:Prisma won't connect to MySQL Docker ContainerPrisma 无法连接到 MySQL Docker 容器
【发布时间】: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


    【解决方案1】:

    您必须先创建一个 docker 网络,例如:

    docker network create demo-network
    

    然后将此网络添加到您的docker-compose:

    version: "3.8"
    services:
      api:
        build:
          context: ./api-old
        ports:
          - "5001:3200"
        container_name: api
        depends_on:
          - db
        networks:
          - demo-network
    
      db:
        image: mysql:5.7
        restart: always
        container_name: mysql
        ports:
          - "3306:3306"
        environment:
          MYSQL_DATABASE: myshowlist
          MYSQL_ROOT_PASSWORD: "root"
        networks:
          - demo-network
    networks:
      demo-network:
        external: true
    

    然后重新运行 docker-compose 并再次尝试此 url:

    DATABASE_URL=mysql://root:root@mysql:3306/myshowlist
    

    希望它有所帮助!

    【讨论】:

      猜你喜欢
      • 2016-04-26
      • 2016-07-22
      • 2019-12-23
      • 2020-12-30
      • 2020-07-29
      • 1970-01-01
      • 2019-04-01
      • 2017-08-10
      • 2020-03-01
      相关资源
      最近更新 更多