[Error][Docker] ERROR: failed to solve: lstat /var/lib/docker/tmp/buildkit-mount

Hyun·2024년 4월 9일
0

ERROR

목록 보기
6/6

발생

도커 이미지를 빌드하기 위해 아래 명령어를 썼더니 계속 경로 문제로 에러가 발생했다.

jar파일 만들기
./gradlew build
명령어로 jar파일을 만들었을 때, ../build/libs에 0.0.1-SNAPSHOT.jar, 0.0.1-SNAPSHOT-plain.jar 파일이 생성된다. 이 중 전자를 docker build 하다가 발생한 문제다.



시도, 파일 내용

명령어 :

PS C:\Users\User\IdeaProjects\sns> docker build -t user_id/project_name:tag .
맨 뒤의 .을 ./으로도 바꿔보고, Docker file의 경로도 여러가지로 바꿨으나 에러 문구만 바뀔뿐 내용은 바뀌지 않았다.


Dockerfile :

FROM openjdk:11
EXPOSE ${SPRINGBOOT_PORT}
ADD build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "-Duser.timezone=Asia/Seoul", "/app.jar"]

도커파일도 마찬가지로 바꿔봤지만 계속 아래의 에러가 났다.
에러는 3번째 줄의 경로 없음 문제였고, build앞에 ./ , ../ 로 바꿔보고, jar파일명을 직접 적기도 해봤다.



ERROR

 => ERROR [2/2] ADD build/libs/*.jar app.jar                                                                                                                       0.1s 
------
 > [2/2] ADD build/libs/*.jar app.jar:
------
Dockerfile:3
--------------------
   1 |     FROM openjdk:11
   2 |     EXPOSE ${SPRINGBOOT_PORT}
   3 | >>> ADD build/libs/*.jar app.jar
   4 |     ENTRYPOINT ["java", "-jar", "-Duser.timezone=Asia/Seoul", "/app.jar"]
--------------------
ERROR: failed to solve: lstat /var/lib/docker/tmp/buildkit-mount15

case 1)

ERROR: failed to solve: lstat /var/lib/docker/tmp/buildkit-mount... no such file or directory

case 2)

ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref 503... no such file or directory

case 3)

ERROR: failed to solve: /build/lib ... no such file or directory



해결 방법

case 1) 잘못된 철자

Dockerfile을 DockerFile이나 dockerfile이라고 적는다면 Dockerfile을 찾지 못해 경로 에러가 발생할 수 있다고 한다.

해결 방법 => 철자를 바꾸면 된다.

=> 하지만, 내 경우는 .jar파일을 찾지 못하는 것이다.

case 2) 잘못된 위치에서 명령어 실행 : project 내에서 명령어를 입력하지 않은 경우

바탕화면이나 환경 변수가 설정되어있는 위치에서 시작하는 경우 dockerfile과 jar이 있는 위치와 명시된 위치가 다르기 때문에 못찾을 수 있다.

해결 방법 => 프로젝트 위치에서 시작하면 된다.

=> 내 경우에 해당되지 않았다.

case 3) (해결).dockerignore에 해당 위치가 있는 경우

1. .dockerignore 확인

ignore파일에 jar파일과 build 디렉토리가 포함된 걸 지우니까 docker build가 되었다.

하지만 plain파일만 빌드되었다.

2. 파일명 내 . 삭제(.jar에만 . 사용)

결국 *.jar 대신에 직접 파일명을 명시해줬는데, "."이 포함되어서 그런지 계속 같은 경로에러가 났다.

build.gradle에서 jar파일을 0-SNAPSHOT.jar로 저장하도록 변경한 뒤, Dockerfile에 직접 0-SNAPSHOT.jar로 명시하였다.

그리고 드디어 성공했다...!!




배운 점

다행이 jar파일이 많이 없어서 조건을 비교할 필요가 없었다.

(project_name)/ build / libs/ *.jar이면 ** / ** / *.jar인줄 알았다.


.dockerignore파일에서 "** / *.jar"을 *.jar로 변경한 뒤 성공했다는 게 의문이어서 찾아본 결과,

**가 계속 반복되는 디렉토리, 즉 0개 이상의 디렉토리 및 모든 하위 디렉토리를 의미하고

*는 단일 디렉토리나 파일 이름에서 0개 이상의 문자와 일치해야하는 것을 의미한다고 한다.

파일이름에서 쓰는 와일드카드 *는 알고 있었는데, **가 하위 디렉토리를 계속 찾을 수 있다는 것은 새로 배우게 되었다.

0개의 댓글