Files
AI0814_jiaoan_public/student_system_2/vue/Dockerfile
T
2026-09-21 17:11:35 +08:00

43 lines
1.5 KiB
Docker

# ============================================================
# 学生管理系统 - Vue3 前端镜像(多阶段构建:Node 编译 -> Nginx 托管)
# 构建: docker build -t student-system-frontend .
# ============================================================
# ---------- 阶段一:编译前端静态资源 ----------
FROM node:20-alpine AS builder
WORKDIR /app
# npm 源,可在构建时通过 --build-arg NPM_REGISTRY=xxx 覆盖
ARG NPM_REGISTRY=https://registry.npmmirror.com
RUN npm config set registry ${NPM_REGISTRY}
# 先拷贝依赖清单,利用层缓存
COPY package.json package-lock.json* ./
# 优先使用 npm ci(按 lock 精确安装),lock 与 package.json 不一致时回退到 npm install
RUN npm ci --no-audit --no-fund || npm install --no-audit --no-fund
# 拷贝源码并编译(生产环境 VITE_BASE_URL 为空 -> 请求走相对路径,由 nginx 代理)
COPY . .
RUN npm run build
# ---------- 阶段二:Nginx 托管静态文件并反向代理后端 ----------
FROM nginx:1.25-alpine
# 时区
ENV TZ=Asia/Shanghai
RUN apk add --no-cache tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# 前端构建产物
COPY --from=builder /app/dist /usr/share/nginx/html
# 站点配置(代理 backend:9090);sed 去除 Windows CRLF,避免 nginx 解析报错
COPY nginx.conf /etc/nginx/conf.d/default.conf
RUN sed -i 's/\r$//' /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]