# [ERROR] [my-server 2/2] COPY build/libs/*SNAPSHOT.jar /app. , Error: Unable to access jarfile application.jar

2024. 12. 13. 13:07개발/Docker

🌞 2024.12.13 Fri

spring boot maven version 을 docker 에 올리던 중

[my-server 2/2] COPY build/libs/*SNAPSHOT.jar /app.

발생

[해결 참고] https://stackoverflow.com/questions/76304976/error-while-copying-maven-generated-jar-file-in-docker-file-build-stage
을 활용해서 Docker file 작성을 다시 했다.

[적용]

    #  📝📝📝<Dockerfile> 📝📝📝
    ## maven use case
    FROM maven:3.8.3-openjdk-17 as maven_builder
    WORKDIR /app
    COPY pom.xml .
    COPY /src ./src
    RUN mvn clean install
    RUN mv target/*.jar target/application.jar  # <-- add
    RUN ls -l /app/target


    FROM openjdk:17-jdk as builder
    COPY --from=maven_builder /app/target/*.jar /target
    RUN java -Djarmode=layertools -jar application.jar extract

    FROM openjdk:17-jdk
    COPY --from=builder dependencies/ ./
    RUN true
    COPY --from=builder snapshot-dependencies/ ./
    RUN true
    COPY --from=builder spring-boot-loader/ ./
    RUN true
    COPY --from=builder application/ ./
    ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

하지만
[ERROR]

[my-server builder 3/3] RUN java -Djarmode=layertools -jar application.jar extract:
0.092 Error: Unable to access jarfile application.jar
failed to solve: process "/bin/sh -c java -Djarmode=layertools -jar application.jar extract" did not complete successfully: exit code: 1

라는 에러가 다시 나왔다.

[해결 참고] https://stackoverflow.com/questions/75593910/docker-with-java-unable-to-access-jarfile-application-jar

java -Djarmode=layertools -jar /api-gateway-0.0.1-SNAPSHOT.jar list
를 치는 순간 권한이 없다고 나온다.

porm.xml 에 다음을 추가해준다.
[기존 플러그인]

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
</plugins>

[변경된 플러그인]

<plugins>
    <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <layers>
                    <enabled>true</enabled>
                </layers>
            </configuration>
    </plugin>
</plugins>

그래도 해결이 안됨. 같은 에러 발생..
그냥 에러가 나오는

RUN java -Djarmode=layertools -jar application.jar extract

📌📌📌[해결]
코드 이하로 모두 주석처리하고 ENTRYPOINT 만 남겨두고 실행하니 docker가 잘 올라갔다.

[적용한 최종 Docker file ]

    #  📝📝📝<Dockerfile> 📝📝📝
    ## maven use case
    FROM maven:3.8.3-openjdk-17 as maven_builder
    WORKDIR /app
    COPY pom.xml .
    COPY /src ./src
    RUN mvn clean install
    RUN mv target/*.jar target/application.jar  # <-- add
    RUN ls -l /app/target

    FROM openjdk:17-jdk as builder
    COPY --from=maven_builder /app/target/*.jar /target
    ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]