루트 (~) 폴더에 Dockerfile이 설정되어 있습니다. 내 파일의 처음 세 줄은 다음과 같습니다.
COPY file1 /root/folder/
COPY file2 /root/folder/
COPY file3 /root/folder/
그러나 각 줄에 대해 다음 오류를 반환합니다.
그러한 파일 또는 디렉토리 없음
파일은 내 Dockerfile과 docker build - < Dockerfile
동일한 디렉토리에 있으며 터미널의 동일한 디렉토리에서도 명령 을 실행하고 있습니다.
내가 여기서 정확히 뭘 잘못하고 있니?
답변
의 COPY 명령 Dockerfile
에있는 파일을 복사 src
받는 dest
폴더. 당신 같은 외모 중 하나를 누락 file1
, file2
및 file3
또는 구축을 위해 노력 Dockerfile
잘못된 폴더에서.
또한를 빌드하는 명령은 Dockerfile
다음과 같아야합니다.
cd into/the/folder/
docker build -t sometagname .
답변
.dockerignore
파일도 확인하십시오 .
이것은 매우 드문 경우라는 것을 알고 있지만 그 파일을 거기에 언급했습니다.
답변
이는 file1 / file2 / file3을 빌드 컨텍스트에없는 절대 경로로 참조하고 있기 때문일 수 있습니다. Docker는 빌드 컨텍스트에서만 경로를 검색합니다.
예를 들어 COPY / home / yourname / file1을 사용하는 경우 Docker 빌드는 $ {docker build working directory} / home / yourname / file1로 해석합니다. 여기에 동일한 이름의 파일이 없으면 파일 또는 디렉터리 오류가 발생하지 않습니다.
Docker 문제 중 하나를 참조하십시오.
답변
명령은 다음과 같습니다.
docker build -t imagename .
과:
docker build -t imagename - < Dockerfile2
같은 방식으로 실행되지 않습니다. Dockerfile 및 Dockerfile2를 사용하여 한 폴더 내에서 2 개의 docker 이미지를 빌드하려는 경우 stdin (<Dockerfile2)을 사용하는 두 번째 예제에서 COPY 명령을 사용할 수 없습니다. 대신 다음을 사용해야합니다.
docker build -t imagename -f Dockerfile2 .
그러면 COPY가 예상대로 작동합니다.
답변
달리는 docker build . -f docker/development/Dockerfile
working, 애플리케이션의 루트가 아닌 지정된 디렉토리에서 도커 파일을 실행할 수 있습니다.
사용 -f
또는 --file
의 이름과 위치를 지정합니다 Dockerfile
.
이것은 다른 디렉토리에서 도커 파일을 실행하려고 할 때 나에게 발생했습니다.
나는이 있었다 COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory
과 고정 표시기 파일을 지정하여이 문제를 해결할 수 있었다.
그것은 docker build docker/development/Dockerfile
나를 위해이 문제를 일으켰습니다.
처음 Dockerfile
에는 앱 루트 디렉토리에 가 있었을 때 제대로 작동 했기 때문에 이상하다는 것을 알았습니다 . 환경 도커 파일을 좀 더 잘 관리하려는 경우 도움이됩니다.
답변
나는 방금이 문제를 경험했으며 여기에 제안 된 제안으로 문제가 해결되지 않았습니다. 알고 보니 내가 잘못 라인 엔딩했다 내 파일을 적절한 선 엔딩으로 변경했다. (이 경우 CRLF에서 LF로, 그래서 Ubuntu 14.04는 내가 Windows에서 편집했던 스크립트를 인식 할 것입니다.)
VSCode를 사용하여 줄 끝을 변경했으며 대부분의 코드 편집기에는 줄 끝을 선택할 수있는 옵션이 있습니다.
이것이 누군가를 돕기를 바랍니다.
답변
약간 어리석은 느낌이 들지만 내 문제는 내가 docker-compose를 실행하고 있고 Dockerfile이 ./deploy 하위 디렉토리에 있다는 것입니다. 내 ADD 참조는 Dockerfile이 아닌 프로젝트의 루트에 상대적이어야합니다.
변경 : ADD ./file.tar.gz / etc / folder / to : ADD ./deploy/file.tar.gz / etc / folder /
어쨌든 누군가 같은 문제가 발생하면 게시 할 것이라고 생각했습니다.