我试图使用Docker运行一个带有两个Docker容器( MySQL和NodeJS )的项目。我很难从后端容器连接到SQL容器。我的后端容器使用Prisma作为ORM,并在运行npx prisma migrate dev
时向我显示了以下错误(在对接-组合过程中)。
Error: P1001: Can't reach database server at `mysql`:`3306`
Please make sure your database server is running at `mysql`:`3306`.
经过一些研究,我认为问题是我的数据库网址。主机名应该与db容器名称相匹配(在本例中是mysql),因此我更新了该名称,但仍然没有结果。
DATABASE_URL=mysql://root:root@mysql:3306/myshowlist # .env file
我也尝试了容器服务名称(db),但也不是这样。
DATABASE_URL=mysql://root:root@db:3306/myshowlist # .env file
我发现令人费解的是,当MySQL容器不在容器内运行时,Prisma没有问题连接到它。当我单独启动MySQL容器并运行Prisma迁移命令时,它可以工作,我可以像普通一样使用后端服务,并从数据库中保存/读取。不过,我必须使用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"]
schema.prisma:
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
发布于 2022-11-18 04:18:09
您必须首先创建一个码头网络,例如:
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
希望能帮上忙!
发布于 2022-11-18 04:34:37
是的,因此mysql地址需要更改为正确的服务名称。您不需要创建一个网络来访问通过同一个docker文件启动的服务,只有当您有多个对接者组合并且您希望您的服务能够相互通信时,这才有帮助。
我认为问题在于,当api试图运行迁移时,mysql容器还没有完全启动。所以时间问题很可能是。检查这个线程:Docker-compose check if mysql connection is ready
https://stackoverflow.com/questions/74484839
复制相似问题