Files
recipe_tool/Dockerfile
T

67 lines
1.7 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:20-alpine AS builder
WORKDIR /app
# 国内镜像加速
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 安装 pnpm(不使用 corepack
RUN npm install -g pnpm
COPY package.json pnpm-lock.yaml ./
# 设置国内镜像源
RUN npm config set registry https://registry.npmmirror.com && \
pnpm config set registry https://registry.npmmirror.com
# 安装依赖
RUN pnpm install --frozen-lockfile
COPY . .
# 构建项目
RUN pnpm build
# Stage 2: Runner
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
# 国内镜像
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
# 以 root 运行以确保有权限访问挂载的 Docker socket /var/run/docker.sock
# 若需以非 root 运行,需在宿主机上执行:
# sudo chmod 666 /var/run/docker.sock
# 或在容器入口脚本中动态匹配 socket 的 group GID
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]