# 多阶段构建:builder 编译 TS -> runner 仅运行 dist FROM node:22-alpine AS builder WORKDIR /app # 先装依赖(利用 Docker 层缓存) COPY package*.json ./ COPY prisma ./prisma RUN npm ci COPY tsconfig*.json nest-cli.json ./ COPY src ./src RUN npx prisma generate && npm run build # ────────────────────────────────────────────── FROM node:22-alpine AS runner WORKDIR /app ENV NODE_ENV=production COPY package*.json ./ COPY prisma ./prisma RUN npm ci --omit=dev && npx prisma generate COPY --from=builder /app/dist ./dist EXPOSE 3000 # 启动前执行 migrate deploy(生产用),随后启动服务 CMD ["sh", "-c", "npx prisma migrate deploy && node dist/main.js"]