AWS K8s部署NestJS服务时Prisma查询引擎缺失问题求助
解决方案
核心问题是Prisma Client的生成环境与运行环境不匹配:你当前是在本地或非debian平台生成Prisma Client后,将文件复制到容器中,导致容器内缺少适配debian-openssl-1.1.x平台的查询引擎文件。即使schema配置了binaryTargets,也必须在容器构建阶段执行prisma generate才能生成对应平台的引擎。
具体修正步骤:
修改Dockerfile,在生产构建阶段执行
prisma generate
调整后的Dockerfile确保在容器环境中生成适配当前平台的Prisma Client:FROM node:buster As development WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . RUN npx prisma generate # 开发阶段生成用于本地开发的Client RUN npm run build db-manager FROM node:buster as production WORKDIR /usr/src/app COPY package*.json ./ RUN npm install --only=production # 生产环境仅安装生产依赖,减小镜像体积 COPY . . COPY --from=development /usr/src/app/dist ./dist RUN npx prisma generate # 关键:在debian容器环境中重新生成Prisma Client,确保引擎匹配 CMD ["node", "dist/main"]删除Deployment中的Prisma引擎路径环境变量
手动指定引擎路径是多余的,Prisma会自动在正确路径查找文件,移除所有PRISMA_*_BINARY开头的环境变量:# 移除以下环境变量 - name: PRISMA_MIGRATION_ENGINE_BINARY - name: PRISMA_INTROSPECTION_ENGINE_BINARY - name: PRISMA_QUERY_ENGINE_BINARY - name: PRISMA_FMT_BINARY验证容器内的引擎文件
构建新镜像并部署后,进入Pod执行命令确认引擎文件存在:ls /usr/src/app/node_modules/.prisma/client/应能看到
libquery_engine-debian-openssl-1.1.x.so.node文件。可选:锁定Prisma版本并清理缓存
固定package.json中的Prisma版本,避免版本不一致问题;构建时清理npm缓存减少异常:RUN npm cache clean --force && npm install --only=production
内容的提问来源于stack exchange,提问作者mohsen
相关产品推荐
相关产品推荐

