描述
我构建了一个简单的RestAPI,使用node.js和Prisma作为ORM,并为该应用程序创建了一个Dockerfile,然后使用docker-compose创建了以下服务:-
web ->这是应用程序服务,它使用Dockerfile提到的above.pgdb ->构建,这是一个使用postgresql官方码头映像构建的PostgreSQL容器。问题
当我尝试运行docker-compose up时,无法构建 web服务,因为Prisma无法运行它的迁移,因为它无法连接到运行在另一个服务中的数据库,即
特定错误消息
错误: P1001:无法到达
pgdb:5432的数据库服务器。
请确保您的数据库服务器在pgdb:5432上运行。
注意:我在这里使用pgdb ( PostgreSQL服务的名称)来引用主机。
预期行为
它应该能够使用pgdb作为主机引用,并成功地连接到位于pgdb:5432的数据库服务器。
代码
docker-compose中引用以创建web服务的Dockerfile从节点:16 WORKDIR /app复制package*.json。运行npm安装副本。。#运行Prisma迁移。运行npx将dev -name init #编译类型记录代码迁移到javascript。运行npx #运行编译的代码(已编译的文件输出到dist文件夹)。CMD“节点”,"dist/index.js“
docker-compose.yml版本:"3.9“服务: webapp: build:。端口:- "5000:5000“depends_on:- pgdb pgdb:映像: postgres:14环境:- POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres -POSTGRES_PASSWORD=postgres
.env (包含Prisma连接字符串)DATABASE_URL="postgresql://postgres:postgres@pgdb:5432/mydb?schema=public"
版本
v16.17.0
^4.4.0
发布于 2022-10-02 14:01:30
运行Prisma迁移。运行npx prisma迁移dev -name init
在docker映像构建时运行迁移是没有意义的。迁移应该在映像的入口点运行,而不是在构建映像时运行。
然后,在部署容器时,在部署的每个环境中,在应用程序启动之前运行迁移。
https://stackoverflow.com/questions/73926309
复制相似问题