# syntax=docker/dockerfile:1 FROM maven:3.9.14-sapmachine-25 AS builder WORKDIR /build # Copy Maven wrapper and pom, then build the project COPY mvnw . COPY .mvn .mvn COPY pom.xml . COPY src ./src RUN ./mvnw -B -DskipTests package FROM eclipse-temurin:11-jre-hotspot WORKDIR /app # Create a non-root user to run the application RUN groupadd -r app && useradd -r -g app app USER app # Copy the built artifacts from the builder stage COPY --from=builder /build/target /app/target # Create a small startup script that locates the built jar and runs it RUN mkdir -p /app \ && cat > /app/start.sh <<'EOS' #!/bin/sh set -e jar=$(ls -1 /app/target/*.jar 2>/dev/null | head -n1) if [ -z "$jar" ]; then echo "No jar found in /app/target" exit 1 fi exec java -jar "$jar" "$@" EOS RUN chmod +x /app/start.sh ENTRYPOINT ["/app/start.sh"]
# syntax=docker/dockerfile:1 FROM maven:3.9.14-sapmachine-25 AS builder WORKDIR /build # Copy Maven wrapper and pom, then build the project COPY mvnw . COPY .mvn .mvn COPY pom.xml pom.xml COPY src ./src RUN ./mvnw -B -DskipTests package FROM eclipse-temurin:11-jre WORKDIR /app # Create a non-root user to run the application RUN groupadd -r app && useradd -r -g app app USER app # Copy the built artifacts from the builder stage COPY --from=builder /build/target /app/target # Startup script to run the built jar RUN mkdir -p /app && cat > /app/start.sh <<'EOS' #!/bin/sh set -e jar=$(ls -1 /app/target/*.jar 2>/dev/null | head -n1) if [ -z "$jar" ]; then echo "No jar found in /app/target" exit 1 fi exec java -jar "$jar" "$@" EOS RUN chmod +x /app/start.sh ENTRYPOINT ["/app/start.sh"]
# Ignore Mac system files .DS_Store # Git .git .gitignore # Maven / Java build output target/ **/target/ # IDE files *.iml *.ipr *.iws .idea/ .vscode/ # Logs logs/ *.log # OS files .DS_Store Thumbs.db # Maven wrapper .mvn/wrapper/
Docker build error summary Failing step - [builder 7/7] RUN ./mvnw -B -DskipTests package Exact error message and exit code - ./mvnw: 227: cannot open /build/.mvn/wrapper/maven-wrapper.properties: No such file - ./mvnw: 283: cannot open /build/.mvn/wrapper/maven-wrapper.properties: No such file - Error: Could not find or load main class org.apache.maven.wrapper.MavenWrapperMain - Caused by: java.lang.ClassNotFoundException: org.apache.maven.wrapper.MavenWrapperMain - ERROR: failed to build: failed to solve: process "/bin/sh -c ./mvnw -B -DskipTests package" did not complete successfully: exit code: 1 Missing packages or files mentioned - /build/.mvn/wrapper/maven-wrapper.properties (No such file) Version mismatch information - Base image used: eclipse-temurin:11-jre (stage-1) - Builder image used: maven:3.9.14-sapmachine-25 - No explicit version mismatch reported; error stems from Maven wrapper files not being present.
# syntax=docker/dockerfile:1 FROM maven:3.9.14-sapmachine-25 AS builder WORKDIR /build # Copy only pom and sources to leverage Maven build cache effectively COPY pom.xml . COPY src ./src # Build the project using Maven (wrapper not required) RUN mvn -B -DskipTests package FROM eclipse-temurin:11-jre WORKDIR /app # Create a non-root user to run the application RUN groupadd -r app && useradd -r -g app app USER app # Copy the built artifacts from the builder stage COPY --from=builder /build/target /app/target # Startup script to run the built jar RUN mkdir -p /app && cat > /app/start.sh <<'EOS' #!/bin/sh set -e jar=$(ls -1 /app/target/*.jar 2>/dev/null | head -n1) if [ -z "$jar" ]; then echo "No jar found in /app/target" exit 1 fi exec java -jar "$jar" "$@" EOS RUN chmod +x /app/start.sh ENTRYPOINT ["/app/start.sh"]
Concerns: COPY --from=builder /build/target /app/target is executed after USER app; the /app directory is owned by root and not writable by non-root, so the copy will fail during image build, Potential risk: if the jar is not produced at /build/target, the runtime will fail; consider ensuring the build output path is correct and accessible to the final stage, No HEALTHCHECK defined; could add a healthcheck to verify the application starts and remains healthy
# syntax=docker/dockerfile:1 FROM maven:3.9.14-sapmachine-25 AS builder WORKDIR /build # Copy only pom and sources to leverage Maven build cache effectively COPY pom.xml ./ COPY src ./src # Build the project using Maven (wrapper not required) RUN mvn -B -DskipTests package FROM eclipse-temurin:11-jre WORKDIR /app # Create a non-root user to run the application RUN groupadd -r app && useradd -r -g app app USER app # Ensure the target directory exists and is writable by app RUN mkdir -p /app/target # Copy the built artifacts from the builder stage; run as root during COPY, then switch to app COPY --from=builder /build/target /app/target # Startup script to run the built jar RUN mkdir -p /app && cat > /app/start.sh <<'EOS' #!/bin/sh set -e jar=$(ls -1 /app/target/*.jar 2>/dev/null | head -n1) if [ -z "$jar" ]; then echo "No jar found in /app/target" exit 1 fi exec java -jar "$jar" "$@" EOS RUN chmod +x /app/start.sh ENTRYPOINT ["/app/start.sh"]
- Exact error message and exit code:
- Error: mkdir: cannot create directory ‘/app/target’: Permission denied
- Exit code: 1
- Failing command/step:
- [stage-1 4/7] RUN mkdir -p /app/target (Dockerfile line 21)
- Missing packages or files mentioned:
- None. The log indicates a permission issue creating the directory, not a missing file/package.
- Version mismatch info:
- No version mismatch indicated. Images used:
- stage-1 base: eclipse-temurin:11-jre (with specific sha256)
- builder: maven:3.9.14-sapmachine-25 (with specific sha256)# syntax=docker/dockerfile:1 FROM maven:3.9.14-sapmachine-25 AS builder WORKDIR /build # Copy pom and sources first to leverage Docker cache COPY pom.xml ./ COPY src ./src # Build the project (wrapper not required since we rely on Maven in this image) RUN mvn -B -DskipTests package FROM eclipse-temurin:11-jre WORKDIR /app # Create a non-root user to run the application RUN groupadd -r app && useradd -r -g app app # Copy the built artifacts from the builder stage COPY --from=builder /build/target /app/target # Ensure correct ownership for the runtime user RUN chown -R app:app /app USER app # Startup script to run the built jar RUN mkdir -p /app && cat > /app/start.sh <<'EOS' #!/bin/sh set -e jar=$(ls -1 /app/target/*.jar 2>/dev/null | head -n1) if [ -z "$jar" ]; then echo "No jar found in /app/target" exit 1 fi exec java -jar "$jar" "$@" EOS RUN chmod +x /app/start.sh ENTRYPOINT ["/app/start.sh"]
- Exact error message and exit code: - Could not find or initialise a local git repository. A repository is required. -> [Help 1] - Exit code: 1 - Failing command/step: - RUN mvn -B -DskipTests package (builder step 5/5 in Dockerfile) - Missing packages or files mentioned: - No local Git repository found in the build context (git-build-hook-maven-plugin requires a repository). - Version mismatch/info: - Failing Maven plugin: com.rudikershaw.gitbuildhook:git-build-hook-maven-plugin:3.6.0 (install phase) - Maven version in use: Maven 3.9.14-sapmachine-25 (image uses maven:3.9.14-sapmachine-25) - Base image context includes Eclipse Temurin 11 JRE for stages and Maven 3.9.14 SAP Machine for the build.
# syntax=docker/dockerfile:1 FROM maven:3.9.14-sapmachine-25 AS builder WORKDIR /build # Initialize a git repository in the build context to satisfy git-build-hook-maven-plugin RUN apt-get update -qq && apt-get install -y -qq git # Copy pom and sources first to leverage Docker cache COPY pom.xml ./ COPY src ./src # Create a local git repository and commit the current state to satisfy plugins expecting a git repo RUN git config --global user.email "build@local" && git config --global user.name "BuildAgent" && git init && git add . && git commit -m "Initial commit for docker build" # Build the project (wrapper not required since we rely on Maven in this image) RUN mvn -B -DskipTests package FROM eclipse-temurin:11-jre WORKDIR /app # Create a non-root user to run the application RUN groupadd -r app && useradd -r -g app app # Copy the built artifacts from the builder stage COPY --from=builder /build/target /app/target # Ensure correct ownership for the runtime user RUN chown -R app:app /app USER app # Startup script to run the built jar RUN mkdir -p /app && cat > /app/start.sh <<'EOS' #!/bin/sh set -e jar=$(ls -1 /app/target/*.jar 2>/dev/null | head -n1) if [ -z "$jar" ]; then echo "No jar found in /app/target" exit 1 fi exec java -jar "$jar" "$@" EOS RUN chmod +x /app/start.sh ENTRYPOINT ["/app/start.sh"]
Smoke [PASS]: ls -1 /app/target/*.jar 2>/dev/null | head -n1 Smoke [PASS]: test -x /app/start.sh Smoke [PASS]: java -version