[Error] COPY failed: stat /var/lib/docker/tmp/ 오류
Github Action을 이용해서 Docker image 생성 후 Hub로 push 하는 CI중에 오류가 발생했다.
오류
COPY failed: stat /var/lib/docker/tmp/ ~
자세히는 모르지만 오류가 난 코드 부분을 보니 경로 문제였다.
Dockerfile
FROM openjdk:17
# 인자 설정 - JAR_File
ARG JAR_FILE=build/libs/*.jar
# jar 파일 복제
COPY ${JAR_FILE} app.jar
# 실행 명령어
ENTRYPOINT ["java", "-jar", "/app.jar"]
나의 첫 Dockerfile은 위와 같다.
문제 해결 1. (실패)
찾아보니 상대경로 문제 일 수도 있다고 하여 COPY 부분을 아래와 같이 도전했으나 같은 오류 발생함
COPY build/libs/*.jar app.jar
문제 해결 2. (실패)
Gradle로 빌드하는 것은 ENTRYPOINT가 다르다고 하여 이렇게 도전했으나 실패! 근데 이것으로 인한 문제는 아닌것같았다.
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "app.jar"]
문제 해결 3. (실패)
Springboot가 버전에 따라 .jar 파일이 2개가 생성되는데 그것으로 인한 문제일 수도 있다고 생각해서 build.gradle에 아래와 같이 추가하였다. (plain버전 안생기게)
추가한 후 .jar파일은 하나만 생겼으나 여전히 문제 발생!
jar {
enabled = false
}
문제 해결 4. (성공)
Dockerfile의 문제가 아닌 Github Action에서의 ci.yml 코드 문제인거 같아서 그 부분을 수정하는데 시간을 들였다.
Dockerfile에 코드도 몇줄없는데 그럴리가 없지 그래!
최종 Dockerfile
FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=docker", "-jar", "app.jar"]
나는 허무하게 해결되었지만, 만약 저렇게 오류가 나서 고생이신 분들이 다시 체크해봐야할 것은 아래와 같은 거 같다! (다량의 검색으로 본 것들!)
1. Dockerfile 파일명을 제대로 하고 있는지 확인
DockerFile (X), dockerfile(X), Dockerfile(O)
2. Dockerfile이 존재하는 파일과 프로젝트 파일의 위치
Dockerfile을 최상단에 위치하도록 하고, 그랬을 때 경로를 잘 확인할 것!
+
추가로 내가 생각했던 것은
jar 파일을 찾지 못하는게 .gitignore로 인한 것은 아닐까 라는 생각이 들었음 [링크]