【发布时间】:2022-07-22 09:49:21
【问题描述】:
我的 nodeJS 后端有问题。我想创建一个 docker compose 环境,但是当我尝试启动我的 Prisma NodeJS 应用程序时,我不断收到此错误。我已经尝试了很多东西,但在 Google 上找不到任何可用的解决方案。该应用程序无需 docker 即可运行。
Docker 编写文件:
endbit-express:
container_name: endbit-express
build: ./endbit-express
volumes:
- ./endbit-express:/app
- /app/node_modules
ports:
- 8080:8080
depends_on:
- mysql
environment:
- DATABASE_URL=mysql://root:root@localhost:3306/endbit
networks:
- endbit
mysql:
container_name: endbit-mysql
image: mysql:8.0.28
restart: always
ports:
- 6033:3306
environment:
- MYSQL_DATABASE=endbit
- MYSQL_ROOT_PASSWORD=root
volumes:
- dbdata:/var/lib/mysql
networks:
- endbit
Docker 文件:
FROM node:17.4.0
WORKDIR /app
COPY package*.json ./
COPY prisma ./prisma
RUN npm install
COPY . .
RUN prisma generate
EXPOSE 8080
CMD ["npm", "start"]
错误:
endbit-express | > express@0.0.0 start
endbit-express | > node ./bin/www
endbit-express |
endbit-express | /app/node_modules/.prisma/client/index.js:3
endbit-express | throw new Error(
endbit-express | ^
endbit-express |
endbit-express | Error: @prisma/client did not initialize yet. Please run "prisma generate" and try to import it again.
endbit-express | In case this error is unexpected for you, please report it in https://github.com/prisma/prisma/issues
endbit-express | at new PrismaClient (/app/node_modules/.prisma/client/index.js:3:11)
endbit-express | at Object.<anonymous> (/app/config/passport.js:7:16)
endbit-express | at Module._compile (node:internal/modules/cjs/loader:1097:14)
endbit-express | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1149:10)
endbit-express | at Module.load (node:internal/modules/cjs/loader:975:32)
endbit-express | at Function.Module._load (node:internal/modules/cjs/loader:822:12)
endbit-express | at Module.require (node:internal/modules/cjs/loader:999:19)
endbit-express | at require (node:internal/modules/cjs/helpers:102:18)
endbit-express | at Object.<anonymous> (/app/app.js:7:1)
endbit-express | at Module._compile (node:internal/modules/cjs/loader:1097:14)
endbit-express |
endbit-express | Node.js v17.4.0
【问题讨论】:
-
volumes:挂载基本上隐藏了 Dockerfile 设置的所有内容;删除该块有帮助吗?您还会遇到连接问题,因为 Dockerfile 将无法连接到数据库(例如,NestJS in Docker can't do a Prisma Migrate on Postgres in another Docker Container)。如果您可以将生成的文件签入源代码管理,这可能是最简单的方法。
标签: node.js docker docker-compose dockerfile prisma