# 构建阶段:安装依赖并打包 H5 FROM node:18-alpine AS build ARG APP_GIT_SHA=unknown ARG APP_BUILD_TIME=unknown WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN printf '{"gitSha":"%s","buildTime":"%s"}\n' "$APP_GIT_SHA" "$APP_BUILD_TIME" > public/version.json RUN npm run build # 运行阶段:nginx 托管静态资源并反向代理 /api 到后端 # 锁定 1.28-alpine:测试服务器 Docker 的 seccomp 拦截 pwrite 系统调用, # 新版 nginx(>=1.31) 用 pwrite 写 pid 文件会被拦导致致命退出;1.28 用 write() 可正常启动。 FROM nginx:1.28-alpine ARG APP_GIT_SHA=unknown ARG APP_BUILD_TIME=unknown LABEL org.opencontainers.image.revision=${APP_GIT_SHA} \ org.opencontainers.image.created=${APP_BUILD_TIME} COPY --from=build /app/dist /usr/share/nginx/html # 覆盖 nginx 默认主配置(含唯一可写的 pid /tmp/nginx.pid,规避受限容器内 /run 不可写导致反复重启) COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80