From cd58c2af96a8d729c1559b9b70753092a721b41f Mon Sep 17 00:00:00 2001 From: clkj <919284064@qq.com> Date: Wed, 17 Jun 2026 12:34:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3d0d86e..6e03af0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,51 +1,41 @@ -# 升级基础镜像到稳定的 Node 22,防止 Prisma 7.x 报引擎不兼容错误 FROM node:22-alpine AS base +RUN apk add --no-cache openssl WORKDIR /app -# ========================================== -# 阶段 1: 安装所有依赖 -# ========================================== +# 阶段1:全量安装依赖(含prisma CLI、wasm、迁移工具) FROM base AS deps COPY package*.json ./ -# 如果本地有 prisma 目录,一并复制,确保编译时生成正确的 Client -COPY prisma ./prisma/ +COPY prisma ./prisma RUN npm ci +# 构建阶段提前生成客户端、wasm文件 +RUN npx prisma generate -# ========================================== -# 阶段 2: 构建应用 -# ========================================== +# 阶段2:打包Next standalone FROM base AS builder COPY --from=deps /app/node_modules ./node_modules COPY . . - -# 仅仅在构建期生成 Prisma Client 代码,【删除】db push 动作,建表必须延后到运行时 -RUN npx prisma generate RUN npm run build -# ========================================== -# 阶段 3: 生产运行环境(Runner) -# ========================================== +# 阶段3:纯运行镜像,只拷贝运行必需文件,舍弃完整prisma CLI FROM base AS runner WORKDIR /app ENV NODE_ENV=production -RUN addgroup --system --gid 1001 nodejs && \ - adduser --system --uid 1001 nextjs +RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs -# 1. 复制 standalone 构建输出 +# Next standalone 运行文件 COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/public ./public -# 2. 【彻底修复】:完整复制 Prisma CLI 运行所需的三个核心物理目录和软链接 +# 仅复制 prisma schema + 生成好的client(不需要完整CLI、wasm) COPY --from=builder /app/prisma ./prisma -COPY --from=builder /app/node_modules/prisma ./node_modules/prisma -COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma -COPY --from=builder /app/node_modules/.bin/prisma ./node_modules/.bin/prisma - -# 3. 创建数据挂载目录并修正权限 -RUN mkdir -p /app/data && chown -R nextjs:nodejs /app/data /app/prisma +COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma +COPY --from=builder /app/node_modules/@prisma/client ./node_modules/@prisma/client +RUN mkdir -p /app/data && chown -R nextjs:nodejs /app /app/data USER nextjs + EXPOSE 3000 -CMD ["node", "server.js"] +# 运行时不再执行 npx prisma,直接启动服务 +CMD ["node", "server.js"] \ No newline at end of file