티스토리 뷰

728x90
반응형

발생 시점 : Dockerfile을 작성한 이후 docker build -t kuard-adm64:1 . 수행 후 아래와 같은 Error 발생

Error Case : COPY failed: stat /var/lib/docker/tmp/docker-builder818542770/bin/kuard: no such file or directory

[root@kmkang kuber]# docker build -t kuard-adm64:1 .
Sending build context to Docker daemon   16.9kB
Step 1/4 : FROM alpine
 ---> 11cd0b38bc3c
Step 2/4 : MAINTAINER Kelsey Higntower <kelsey.hightower@kuar.io>
 ---> Using cache
 ---> 19c080537c22
Step 3/4 : COPY bin/kuard /kuard
COPY failed: stat /var/lib/docker/tmp/docker-builder818542770/bin/kuard: no such file or directory
[root@kmkang kuber]

문제 원인 : Dockerfile의 COPY 부분에 없는 파일을 복사하고자 할때 발생

Dockerfile COPY 구문 확인
COPY는 파일을 이미지에 추가합니다. ADD와는 달리 COPY는 압축 파일을 추가할 때 압축을 해제하지 않고, 파일 URL도 사용할 수 없습니다.
COPY <복사할 파일 경로> <이미지에서 파일이 위치할 경로>
<복사할 파일 경로>는 컨텍스트 아래를 기준으로 하며 컨텍스트 바깥의 파일, 디렉터리나, 절대 경로는 사용할 수 없습니다.
예) COPY ../hello.txt /home/hello (X)
예) COPY /home/hello/hello.txt /home/hello (X)
<복사할 파일 경로>는 파일뿐만 아니라 디렉터리도 설정할 수 있으며, 디렉터리를 지정하면 디렉터리의 모든 파일을 복사합니다. 또한, 와일드카드를 사용하여 특정 파일만 복사할 수 있습니다.
예) COPY *.txt /root/
<복사할 파일 경로>에 인터넷에 있는 파일의 URL은 사용할 수 없습니다.
압축 파일은 압축을 해제하지 않고 그대로 복사됩니다.
<이미지에서 파일이 위치할 경로>는 항상 절대 경로로 설정해야 합니다. 그리고 마지막이 /로 끝나면 디렉터리가 생성되고 파일은 그 아래에 복사됩니다.
COPY ./ /hello와 같이 현재 디렉터리를 추가할 때 .dockerignore 파일에 설정한 파일과 디렉터리는 제외됩니다.
COPY로 추가되는 파일은 소유자(UID) 0, 그룹(GID) 0으로 설정되고 권한은 기존 파일의 권한을 따릅니다.
현재 디렉토리의 파일 현황
[root@kmkang kuber]# ls
Dockerfile  perl5  test.txt
[root@kmkang kuber]#

해결 방안 : Dockerfile 수정

==> 기존
[root@kmkang kuber]# cat Dockerfile
FROM alpine
MAINTAINER Kelsey Higntower <kelsey.hightower@kuar.io>
COPY tt.txt /kuard
ENTRYPOINT ["/kuard"]
[root@kmkang kuber]#

==> 변경
[root@kmkang kuber]# cat Dockerfile
FROM alpine
MAINTAINER Kelsey Higntower <kelsey.hightower@kuar.io>
COPY test.txt /kuard
ENTRYPOINT ["/kuard"]
[root@kmkang kuber]#

728x90
반응형