fix: 修复pnpm monorepo Docker构建问题

- 移除runner阶段的pnpm安装(不再需要)
- 使用npm install替代直接复制node_modules
- 单独复制@iconsulting/shared构建产物
- 解决pnpm符号链接在Docker中失效的问题

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-09 08:32:58 -08:00
parent ac105a8c0b
commit 287aeb5c72
5 changed files with 36 additions and 13 deletions

View File

@ -25,13 +25,18 @@ FROM node:20-alpine AS runner
WORKDIR /app WORKDIR /app
RUN corepack enable && corepack prepare pnpm@latest --activate
RUN addgroup --system --gid 1001 nodejs && \ RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nestjs adduser --system --uid 1001 nestjs
COPY --from=builder /app/packages/services/conversation-service/dist ./dist COPY --from=builder /app/packages/services/conversation-service/dist ./dist
COPY --from=builder /app/packages/services/conversation-service/package.json ./ COPY --from=builder /app/packages/services/conversation-service/package.json ./
COPY --from=builder /app/node_modules ./node_modules
# 复制 shared 包的构建产物
COPY --from=builder /app/packages/shared/dist ./node_modules/@iconsulting/shared/dist
COPY --from=builder /app/packages/shared/package.json ./node_modules/@iconsulting/shared/
# 安装生产依赖
RUN npm install --omit=dev --ignore-scripts
ENV NODE_ENV=production ENV NODE_ENV=production
ENV PORT=3004 ENV PORT=3004

View File

@ -25,13 +25,18 @@ FROM node:20-alpine AS runner
WORKDIR /app WORKDIR /app
RUN corepack enable && corepack prepare pnpm@latest --activate
RUN addgroup --system --gid 1001 nodejs && \ RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nestjs adduser --system --uid 1001 nestjs
COPY --from=builder /app/packages/services/evolution-service/dist ./dist COPY --from=builder /app/packages/services/evolution-service/dist ./dist
COPY --from=builder /app/packages/services/evolution-service/package.json ./ COPY --from=builder /app/packages/services/evolution-service/package.json ./
COPY --from=builder /app/node_modules ./node_modules
# 复制 shared 包的构建产物
COPY --from=builder /app/packages/shared/dist ./node_modules/@iconsulting/shared/dist
COPY --from=builder /app/packages/shared/package.json ./node_modules/@iconsulting/shared/
# 安装生产依赖
RUN npm install --omit=dev --ignore-scripts
ENV NODE_ENV=production ENV NODE_ENV=production
ENV PORT=3005 ENV PORT=3005

View File

@ -25,13 +25,18 @@ FROM node:20-alpine AS runner
WORKDIR /app WORKDIR /app
RUN corepack enable && corepack prepare pnpm@latest --activate
RUN addgroup --system --gid 1001 nodejs && \ RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nestjs adduser --system --uid 1001 nestjs
COPY --from=builder /app/packages/services/knowledge-service/dist ./dist COPY --from=builder /app/packages/services/knowledge-service/dist ./dist
COPY --from=builder /app/packages/services/knowledge-service/package.json ./ COPY --from=builder /app/packages/services/knowledge-service/package.json ./
COPY --from=builder /app/node_modules ./node_modules
# 复制 shared 包的构建产物
COPY --from=builder /app/packages/shared/dist ./node_modules/@iconsulting/shared/dist
COPY --from=builder /app/packages/shared/package.json ./node_modules/@iconsulting/shared/
# 安装生产依赖
RUN npm install --omit=dev --ignore-scripts
ENV NODE_ENV=production ENV NODE_ENV=production
ENV PORT=3003 ENV PORT=3003

View File

@ -25,13 +25,18 @@ FROM node:20-alpine AS runner
WORKDIR /app WORKDIR /app
RUN corepack enable && corepack prepare pnpm@latest --activate
RUN addgroup --system --gid 1001 nodejs && \ RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nestjs adduser --system --uid 1001 nestjs
COPY --from=builder /app/packages/services/payment-service/dist ./dist COPY --from=builder /app/packages/services/payment-service/dist ./dist
COPY --from=builder /app/packages/services/payment-service/package.json ./ COPY --from=builder /app/packages/services/payment-service/package.json ./
COPY --from=builder /app/node_modules ./node_modules
# 复制 shared 包的构建产物
COPY --from=builder /app/packages/shared/dist ./node_modules/@iconsulting/shared/dist
COPY --from=builder /app/packages/shared/package.json ./node_modules/@iconsulting/shared/
# 安装生产依赖
RUN npm install --omit=dev --ignore-scripts
ENV NODE_ENV=production ENV NODE_ENV=production
ENV PORT=3002 ENV PORT=3002

View File

@ -34,17 +34,20 @@ FROM node:20-alpine AS runner
WORKDIR /app WORKDIR /app
# 安装 pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate
# 创建非 root 用户 # 创建非 root 用户
RUN addgroup --system --gid 1001 nodejs && \ RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nestjs adduser --system --uid 1001 nestjs
# 复制构建产物 # 复制构建产物和依赖配置
COPY --from=builder /app/packages/services/user-service/dist ./dist COPY --from=builder /app/packages/services/user-service/dist ./dist
COPY --from=builder /app/packages/services/user-service/package.json ./ COPY --from=builder /app/packages/services/user-service/package.json ./
COPY --from=builder /app/node_modules ./node_modules
# 复制 shared 包的构建产物 (因为依赖 workspace:*)
COPY --from=builder /app/packages/shared/dist ./node_modules/@iconsulting/shared/dist
COPY --from=builder /app/packages/shared/package.json ./node_modules/@iconsulting/shared/
# 安装生产依赖 (使用 npm 避免 pnpm 符号链接问题)
RUN npm install --omit=dev --ignore-scripts
# 设置环境变量 # 设置环境变量
ENV NODE_ENV=production ENV NODE_ENV=production