COPY에 대한 도커 이미지를 만들 수 없습니다 : stat / var / lib / docker / tmp / docker-builder error


87

도커 이미지를 만들고 싶습니다. 이것은 내 작업 디렉토리입니다. Dockerfile.in test.json test.py

그리고 이것은 내 Dockerfile입니다.

COPY ./test.json /home/test.json
COPY ./test.py /home/test.py

RUN python test.py

이 명령을 시작할 때 : docker build -f Dockerfile.in -t 637268723/test:1.0 .

이 오류가 발생합니다.

`Step 1/5 : COPY ./test.json /home/test.json
 ---> Using cache
 ---> 6774cd225d60
 Step 2/5 : COPY ./test.py /home/test.py
 COPY failed: stat /var/lib/docker/tmp/docker-builder428014112/test.py: 
 no such file or directory`

누구든지 나를 도울 수 있습니까?


12
dockerignore에 test.py 또는 * .py가 있습니까?
Jay Dorsey

3
Docker가 exitst를 제출 한 현재 디렉토리에서 test.py를 사용할 수 있습니다.
Jinna Balu

5
이 문제를 해결 했습니까? 같은 문제가 있습니다.
emmdee

2
Docker는 엔진 imho에서 여전히 버그가있는 동작을 나타냅니다. COPYDockerfile 에서 동일한 문을 사용했으며 동일한 문제가 발생했습니다. COPY /host_file /container_folder(점없이) 시도 했고 작동했습니다. 그 후 COPY여기에 있는 전자 를 시도했는데 정상적으로 작동했습니다 (wtf?)! 제가 다르게 만든 한 가지는 Docker가 빌드 프로세스에서 생성하는 모든 이미지 (캐시)를 제거하는 것입니다. 내 생각에 휴지통은 여전히 ​​이러한 중간 이미지에 저장 될 수 있습니다 (Docker 18.09.5를 사용하고 있습니다). SO 또는 GitHub를 살펴보십시오. '호스트 복사-> 컨테이너에 대한 많은 문제. 나쁜 징조.
ivanleoncz

1
와우, ivanleoncz 감사합니다.이 문제를 해결했습니다. 나는이 절이 있었다 : ADD mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar 그리고 나는 mcint_swagger_hub-1.0.0.jar 앞에 간단한 슬래시를 넣었습니다. 이것을 얻었습니다 : ADD /mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar 그리고 나는 문제가 없습니다. 감사합니다! God Bless you
Richard Rebeco

답변:


52

Dockerfile과 동일한 디렉토리에 해당 파일을 넣어야합니다.


'from python : 2.7-onbuild'를 사용했기 때문에 어쨌든 Dockerfile 위치에서 모든 형제 및 하위 파일을 복사했습니다. 그래서 마침내 Dockerfile에서 COPY 줄을 제거하고 형제 파일로 사용되는 파일도 복사되었습니다.
Kuba

2
이것이 작동하지 않으면 .dockerignore파일을 확인하십시오 !
Kenny Evitt 20.06.06

이것은 나를 위해 일했습니다.
cnu

42

.dockerignore파일 이 있는지 확인하고 있다면 다음을 추가하십시오.

!mydir/test.json
!mydir/test.py

2
이것은 나를 위해 일했고 전체 폴더가 무시되었으며 docker가 이미지를 생성하지 못하여 파일 경로에 대해 화를 냈습니다.
Marco Medrano

이것은 나에게도 효과적이었습니다. 내 경우에는 내가 언급 한 폴더가 .dockerignore에 있었으므로 제거되었습니다.
Durga P. Kapa

11
  1. Q1 : .dockerignore빌드 경로에서 파일을 확인하십시오. 복사하려는 파일 또는 디렉토리가 무시 파일 목록에있을 수 있습니다!
  2. Q2 : COPY 지시문은 이미지를 빌드하는 컨텍스트를 기반으로하므로 현재 이미지를 빌드하고있는 디렉토리의 문제에 유의하십시오! 참조 : https://docs.docker.com/engine/reference/builder/#copy

.dockerignore가 내 문제의 근본 원인입니다!
Ming Zhu

7

./소스 경로에서 제거하면 문제가 해결됩니다.

 COPY test.json /home/test.json
 COPY test.py /home/test.py

4
D : 5 월 경우에는 내가 아 무시 고정 표시기에 넣어
Adiii

@Mugen 내 의견이 당신의 생명을 구해줘 서 기뻐요;)
Adiii dec

1
@Adiii 당신도 내 생명을 구했습니다.
MonkeySeeMonkeyDo

4

나는 또한 똑같이 직면하고 있었고, 도커 파일을 프로젝트의 루트로 옮겼습니다. 그런 다음 작동했습니다


4

빌드를 시작하려면 다음 명령을 사용해야했습니다.

docker build .


2

귀하의 경우 ./를 제거하면 문제가 해결됩니다. 나는 부모 디렉토리의 디렉토리를 사용하고 있었고 docker는 Dockerfile이있는 디렉토리 아래에있는 파일에만 액세스 할 수 있으므로 디렉토리 구조가 / root / dir 및 Dockerfile / root / dir / Dockerfile 인 경우가 있습니다.

다음을 복사 할 수 없습니다.

COPY root/src /opt/src

1
내 문제는 조금 달랐지만 Dockerfile을 포함하는 폴더 위의 파일을 참조 할 때 이상한 경로가있는 Docker의 "문제"가 문제였습니다. 감사합니다 ! [Windows 10 + Powershell].
RichW

1

이것은 비슷한 문제에 직면 한 다른 사람에게 도움이 될 수 있습니다.

파일을 Dockerfile과 동일한 디렉토리에 배치하는 대신 디렉토리를 만들고 복사 할 파일을 배치 한 다음 시도하십시오.

COPY mydir/test.json /home/test.json
COPY mydir/test.json /home/test.json

이것은 버그입니까? 누군가 이것이 왜 작동하는지 알아 냈습니까? 이 도움이있는 유일한 일이었다
Elijas Dapšauskas을

1

또 다른 잠재적 인 원인은 docker가 기본적으로 심볼릭 링크를 따르지 않는다는 것입니다 (예 : 사용하지 마십시오 ln -s).


1

제 경우에는 COPY 명령을 엉망으로 만든 주석 줄이었습니다.

COPY 명령 다음에 주석을 제거하고 명령 위의 전용 줄에 배치했습니다. 놀랍게도 문제가 해결되었습니다.

잘못된 Dockerfile 명령

COPY qt-downloader .     # https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions

작업 Dockerfile 명령

# https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions
COPY qt-downloader .     

누군가에게 도움이되기를 바랍니다.


1

이미지를 빌드하는 컨텍스트가 올바르게 설정되었는지 확인하십시오. 빌드 할 때 컨텍스트를 인수로 설정할 수 있습니다. 예 : docker build -f ./Dockerfile ..여기서 '..'는이 예의 컨텍스트입니다.


0

Docker compose 파일을 사용할 때 게시하고 obj / Docker / Publish에 게시합니다. 여기에 내 파일을 복사하고 Dockerfile을이 디렉터리 (생성 된대로)로 지정하면 작동합니다.


0

도 커가 파일을 찾는 방법은 현재 디렉토리에서 가져온 것입니다.

target / xyz.jar app.jar 복사

target / xyz.jar app.jar 추가

xyz jar는 current / target 디렉토리에 있어야합니다. 여기서 current는 docker 파일이있는 위치입니다. 따라서 다른 디렉토리에도 커가 있다면. 메인 프로젝트 디렉토리로 가져와 이미지에 추가되거나 복사되는 jar에 대한 직선 경로를 갖는 것이 더 좋습니다.


0

.tgz 파일과 동일한 문제가 발생했습니다.

파일의 위치에 관한 것입니다. 파일이 Dockerfile과 동일한 디렉토리에 있는지 확인하십시오.

또한 .dockerignore 파일 디렉토리가 파일 정규식 패턴을 제외하지 않는지 확인하십시오.


0

제 경우에는 모든 프로젝트 파일을 하위 디렉토리에 넣어야했습니다.

app -|inside app directory we have the following
     | package.js
     | src 
     | assets
Dockerfile

그런 다음 그의 방식으로 파일을 복사했습니다.

COPY app ./

0

도커 이미지를 빌드하고 컨테이너 레지스트리로 푸시하는 동안 이러한 오류가 발생했습니다. 내 도커 파일 내에서 대상 폴더에서 jar 파일을 복사하고 java -jar 명령으로 실행하려고했습니다.

.gitignore 파일에서 .jar 파일과 대상 폴더를 제거하여 문제를 해결했습니다.


-1

이것이 발생하는 이유입니다. 즉, 도커를 실행하는 호스트 OS의 로컬 디렉토리에 파일이 있어야합니다. 그렇지 않으면이 오류가 발생합니다.

사용 : 하나 개의 솔루션이다 RUN cp <src> <dst>대신 COPY <src> <dst>

그런 다음 작동하는 명령을 실행하십시오!


1
안녕하세요, Nishant! 더 자세한 내용으로 솔루션을 표현하는 것이 좋습니다. 호스트에서 컨테이너로 파일을 복사하는 것은 Docker에서 여전히 까다로운 작업입니다. 답변을 명확히하기 위해 예를 들어주세요. 감사합니다 :)
ivanleoncz

-1

docker-compose.yaml의 다음 구조를 사용하면 루트의 하위 폴더에 Dockerfile을 가질 수 있습니다.

version: '3'
services:
  db:
    image: postgres:11
    environment:
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - postgres-data:/var/lib/postgresql/data
    ports:
      - 127.0.0.1:5432:5432
  **web:
    build: 
      context: ".."
      dockerfile: dockerfiles/Dockerfile**
    command: ...
...

그런 다음 docker-compose.yaml과 동일한 디렉터리에있는 Dockerfile에서 다음을 수행 할 수 있습니다.

ENV APP_HOME /home

RUN mkdir -p ${APP_HOME}

# Copy the file to the directory in the container
COPY test.json ${APP_HOME}/test.json
COPY test.py ${APP_HOME}/test.py

# Browse to that directory created above
WORKDIR ${APP_HOME}

그런 다음 다음과 같이 상위 디렉토리에서 docker-compose를 실행할 수 있습니다.

docker-compose -f .\dockerfiles\docker-compose.yaml build --no-cache

-7
 <plugin>
    <groupId>io.fabric8</groupId>

    <artifactId>docker-maven-plugin</artifactId>
    <configuration>
      <images>
        <image>
          <name>imagenam</name>
          <alias>dockerfile</alias>
          <build>
            <!-- filter>@</filter-->
            <dockerFileDir>dockerfile loaction</dockerFileDir>
            <tags>
            <tag>latest</tag>
            <tag>0.0.1</tag>
            </tags>
          </build>
          <run>
            <ports>
              <port>8080:8080</port>
            </ports>
          </run>
        </image>
      </images>
    </configuration>
  </plugin>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.