# ---------- 构建阶段:JDK 25 + Maven ---------- FROM maven:3.9-eclipse-temurin-25 AS build WORKDIR /build # 先只复制 pom,利用镜像层缓存加速依赖下载 COPY pom.xml . RUN mvn -B -ntp dependency:go-offline COPY src ./src RUN mvn -B -ntp clean package -DskipTests # ---------- 运行阶段:JRE 25 ---------- FROM eclipse-temurin:25-jre-alpine WORKDIR /app RUN mkdir -p /app/logs /app/config && chmod 755 /app/logs /app/config COPY --from=build /build/target/iam-api-*.jar app.jar ENV TZ=Asia/Shanghai \ SPRING_PROFILES_ACTIVE=prod \ # netty 4.1 仍使用 sun.misc.Unsafe 内存访问,JDK 25 下显式放行以消除告警 # -Duser.timezone 独立于操作系统时区库,避免 alpine 镜像里 TZ 不生效导致时间写入 UTC JAVA_OPTS="-XX:MaxRAMPercentage=75 -XX:+UseG1GC --sun-misc-unsafe-memory-access=allow -Duser.timezone=Asia/Shanghai" EXPOSE 8900 HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8900/actuator/health || exit 1 ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar app.jar"]