# ======================= # Builder stage # ======================= FROM maven:3.8.5-eclipse-temurin-17 AS builder WORKDIR /workdir/server # Copy only pom.xml first for better layer caching COPY pom.xml . # Download dependencies with optimization flags RUN mvn dependency:resolve dependency:resolve-plugins -B -T 1C # Copy source code COPY src ./src # Build the application RUN mvn package -B -T 1C -DskipTests -Dmaven.javadoc.skip=true # Verify the JAR was created and rename it to a consistent name RUN ls -la target/ && \ mv target/*.jar target/app.jar # ======================= # Runtime stage # ======================= FROM eclipse-temurin:17-jre-focal # Expose port EXPOSE 8080 # Create app and uploads directories RUN mkdir -p /app && \ mkdir -p /app/uploads && \ chmod 755 /app/uploads # Set working directory WORKDIR /app # Copy the JAR with a consistent name COPY --from=builder /workdir/server/target/app.jar /app/app.jar # Create volume for uploads VOLUME ["/app/uploads"] # Use exec form of ENTRYPOINT (not shell form) for proper signal handling # and environment variable passing ENTRYPOINT ["java", "-jar", "/app/app.jar"]