Files
recipe_tool/Dockerfile
T
hanhan d74a6704ec fix: 修复 pnpm install 报 ERR_PNPM_IGNORED_BUILDS 导致 Docker 构建失败
- pnpm 11 在 CI 下将未批准的依赖构建脚本升级为硬错误(msw/sharp/unrs-resolver)
- pnpm-workspace.yaml 用 allowBuilds 显式放行三个包(sharp 需下载原生二进制供 Next 图片优化使用),移除无效的 ignoredBuiltDependencies 与占位模板
- package.json 移除 pnpm 11 已不再读取的 pnpm.onlyBuiltDependencies 字段
- Dockerfile apk 镜像源改回 sed 替换方案(echo 方式引用的 ALPINE_VERSION 在容器内未定义,runner 阶段 apk add 会失败);保留 pnpm 国内源参数
2026-09-09 00:04:57 +08:00

59 lines
1.6 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dockerfile for Recipe Translation Tool
# Stage 1: Builder
FROM node:22-alpine AS builder
WORKDIR /app
# 国内 apk 镜像加速(sed 替换官方源域名,alpine 版本无关)
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 安装 pnpm(不使用 corepack)
RUN npm install -g pnpm --registry=https://registry.npmmirror.com
RUN pnpm config set registry https://registry.npmmirror.com --global
COPY package.json pnpm-lock.yaml ./
# 构建脚本批准声明在 pnpm-workspace.yaml 的 allowBuilds(sharp/msw/unrs-resolver)
# 安装依赖
RUN pnpm install --frozen-lockfile
COPY . .
# 构建项目
RUN pnpm build
# Stage 2: Runner
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
# 国内 apk 镜像
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 创建用户
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nextjs
# 复制构建产物
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
# 复制配置文件
COPY --from=builder /app/config.json ./
COPY --from=builder /app/.version ./
COPY --from=builder /app/.env ./
COPY --from=builder /app/docker-compose.yml ./
# 给 nextjs 用户授权整个目录
RUN chown -R nextjs:nodejs /app
# 安装 git(版本检查、拉取更新)和 docker CLI(构建/重启容器)
USER root
RUN apk add --no-cache git docker-cli docker-compose
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]