도커 파일에 파일을 복사하는 중인데, 해당 파일이나 디렉토리가 없습니까?
루트(~) 폴더에 도커 파일이 설정되어 있습니다.파일의 처음 세 줄은 다음과 같습니다.
COPY file1 /root/folder/
COPY file2 /root/folder/
COPY file3 /root/folder/
그러나 각 라인에 대해 다음 오류를 반환합니다.
해당 파일 또는 디렉터리가 없습니다.
은 나의 나는 "Docker 파일" .docker build - < Dockerfile
터미널의 같은 디렉토리에도 있습니다.
내가 여기서 뭘 잘못하고 있는 거지?
를 하세요..dockerignore
파일도 있습니다.
매우 드문 경우라는 것은 알지만, 그 파일이 거기에 언급되어 있었습니다.
아마도 당신이 언급한 것 때문에 발생한 것 같습니다.file1
/file2
/file3
Docker는 빌드 컨텍스트에 없는 절대 경로로 빌드 컨텍스트의 경로만 검색합니다.
예: 을 사용하는 경우COPY /home/yourname/file1
는 도커빌드다같해이석다니합음과는다▁dock▁as로 해석합니다.${docker build working directory}/home/yourname/file1
여기에 같은 이름의 파일이 없으면 파일 또는 디렉터리 오류가 발생하지 않습니다.
의 Dockerfile
을 일파복위에 복사합니다.src
에▁dest
폴더를 누릅니다.당신이 놓친 것처럼 보입니다.file1
,file2
그리고.file3
혹은 그것을 구축하려고 노력하는 것.Dockerfile
잘못된 폴더에서.
또한 다음을 구축하기 위한 명령입니다.Dockerfile
비슷한 것이어야 합니다.
cd into/the/folder/
docker build -t sometagname .
명령어는 다음과 같습니다.
docker build -t imagename .
그리고:
docker build -t imagename - < Dockerfile2
동일한 방식으로 실행되지 않습니다.Dockerfile 및 Dockerfile2를 사용하여 한 폴더 내에서 2개의 Docker 이미지를 빌드하려는 경우 두 번째 예제에서 stdin(<Dockerfile2)을 사용하여 COPY 명령을 사용할 수 없습니다.대신 다음을 사용해야 합니다.
docker build -t imagename -f Dockerfile2 .
그러면 복사가 예상대로 작동합니다.
중입니다.docker build . -f docker/development/Dockerfile
응용프로그램 루트가 아닌 지정된 디렉토리에서 도커 파일을 실행할 수 있습니다.
사용하다-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는 내가 윈도우에서 편집하던 스크립트를 인식할 것입니다.)
저는 VSCode를 사용하여 줄 끝을 변경했으며 대부분의 코드 편집기는 줄 끝을 선택할 수 있는 옵션이 있어야 합니다.
이것이 누군가에게 도움이 되기를 바랍니다.
docker build - < Dockerfile
또는Get-Content .\Dockerfile | Docker build -
PS에서 상황을 파악하지 못할 수 있습니다.는 당신이 을 사용하는 것을 합니다.
Docker build -f .\Path\Dockerfile .
다음은 솔루션 및 모범 사례입니다.
복사할 모든 파일을 보관할 수 있는 리소스 폴더를 만들어야 합니다.
├── Dockerfile
└── resources
│ ├── file1.txt
│ ├── file2.js
파일 복사 명령은 다음과 같이 지정해야 합니다.
COPY resources /root/folder/
어디에
*resources - Docker 파일이 있는 동일한 폴더에 만든 로컬 폴더
*/root/folder/ - 컨테이너에 있는 폴더
약간 바보 같은 느낌이 들지만, 제 문제는 제가 도커 컴포지를 실행하고 있었고, 제 도커 파일이 ./deploy 하위 디렉터리에 있었다는 것입니다.내 ADD 참조는 Docker 파일이 아니라 프로젝트 루트에 상대적이어야 합니다.
변경됨: ADD ./file.tar.gz /etc/folder/ to: ADD ./deploy/file.tar.gz /etc/folder/
어쨌든, 누군가 같은 문제에 부딪혔을 때를 대비해서 글을 올려야겠다고 생각했습니다.
복사에 대한 이전 호출은 디렉터리를 변경하는 것일 수 있습니다.
COPY ./server/package.json ./server # this passes, but the dest ./server is considered a file
COPY ./server/dist ./server/dist # error, ./server/dist is not a directory
첫 번째 호출에 후행 슬래시 추가
COPY ./server/package.json ./server/
오래된 일인 건 알지만, 지적할 점이 있습니다.모든 것이 원래대로라고 생각한다면, 당신의 .gitignore 파일을 확인하세요 :)
폴더가 로컬에 있을 수 있지만, Git ignore에 폴더가 있으면 서버에 없습니다. 즉, Docker는 존재하지 않으므로 해당 폴더를 찾을 수 없습니다.
비슷하고 트슬개티스의 대답 덕분에, 그 후.
gcloud builds submit --config cloudbuild.yaml .
그것은 보여줍니다.
Check the gcloud log [/home/USER/.config/gcloud/logs/2020.05.24/21.12.04.NUMBERS.log] to see which files and the contents of the
default gcloudignore file used (see `$ gcloud topic gcloudignore` to learn
more).
로그를 가 그로확인도사것용로으를 한다고 되어있습니다..gitignore
:
DATE Using default gcloudignore file:
# This file specifies files that are *not* uploaded to Google Cloud Platform
# using gcloud. It follows the same syntax as .gitignore, with the addition of
# "#!include" directives (which insert the entries of the given .gitignore-style
# file at that point).
# ...
.gitignore
그래서 제가 고쳤습니다..gitignore
(대신 화이트리스트로 사용) 도커가 파일을 복사했습니다.
[평판이 부족해서 답변을 추가했습니다.]
소스 디렉토리가 올바른 빌드 컨텍스트에 있음에도 불구하고 이 문제가 발생했습니다.소스 디렉토리가 빌드 컨텍스트 외부의 위치에 대한 심볼릭 링크였기 때문에 그 이유를 찾았습니다.
예를 들어 내 Docker 파일에는 다음이 포함됩니다.
COPY dir1 /tmp
한다면dir1
는 징적인연다니결입상의 상징적인 입니다.COPY
제 경우에는 명령어가 작동하지 않습니다.
문제는 여기에 있습니다.
STDIN(도커 빌드 - < some file)을 사용하여 빌드하면 빌드 컨텍스트가 없으므로 COPY를 사용할 수 없습니다.
자세한 내용은 https://docs.docker.com/engine/reference/builder/ #copy
다음과 같은 방법으로 도커를 구축하면 됩니다.
docker build -t name-of-your-tag .
다음 오류에 대해,
COPY failed: stat /<**path**> :no such file or directory
저는 도커 서비스를 다시 시작함으로써 그것을 해결했습니다.
sudo service docker restart
Docker put_archive에서 파일을 찾을 수 없습니다.도커용 파이썬 API를 사용하고 있습니다.도커 버전 1.12.5, 빌드 7392c3b
docker.errors.NotFound: 404 Client Error: Not Found ("lstat /var/lib/docker/aufs/mnt/39d58e00519ba4171815ee4444f3c43d2c6a7e285102747398f6788e39ee0e87/var/lib/neo4j/certificates: no such file or directory")
생성된 도커 컨테이너에 파일을 복사할 수 없습니다.
con = cli.create_container(...)
cli.put_archive(...)
cli.start(con['Id'])
작업 순서를 변경하면 오류가 발생하지 않고 파일이 원하는 위치에 정확히 복사됩니다.그래서 제 코드가 작동하고 제가 원하는 것을 하고 있다는 것을 알고 있습니다.그러나 컨테이너를 시작하기 전에 구성 파일을 컨테이너에 복사하는 것이 중요합니다.시작 후 파일을 처리하면 컨테이너가 시작되기 전에 복사해야 하는 사용자 지정 구성이 아닌 기본 구성으로 시작됩니다.도커는 이 문제가 종결되었다고 주장하지만 여전히 제 애플리케이션에 영향을 미치고 있습니다.
동일한 코드가 다른 실행 순서로 작동합니다.
con = cli.create_container(...)
cli.start(con['Id'])
cli.put_archive(...)
당신이 옳은 일을 했다고 확신하지만 도커가 여전히 불평한다면, 이 문제를 살펴보십시오: https://github.com/moby/moby/issues/27134 .
엔진을 하는 것 같습니다.service docker restart
이 문제를 해결할 수 있습니다.
이 문제에 대한 수정 사항을 검색하는 중이었는데 ADD 또는 COPYING 중인 폴더가 빌드 폴더, 위의 여러 디렉토리 또는 /에서 참조된 폴더에 없습니다.
빌드 폴더 외부에서 빌드 폴더로 폴더를 이동하면 문제가 해결되었습니다.
stdin을 사용하지 않고 컨텍스트를 유지하는 방법 중 하나는 다음과 같습니다.
도커 파일에 추가해야 합니다.
ADD /your_dir_to_copy /location_in_container
그런 다음 /your_syslog_to_copydir의 상위 항목으로 이동해야 합니다.
그런 다음 이 명령을 실행합니다.
sudo docker build . -t (image/name) -f path_of_your_dockerfile/Dockerfile
컨테이너를 생성한 후
docker run -ti --rm cordova bash
컨테이너에서 디렉토리를 복사한 후
우연히 이것을 만났어요.일부 디렉터리를 복사하지 못했습니다.파일을 복사했습니다..gitignore(.dockerignore 뿐만 아니라)에 포함된 파일도 무시되기 때문인 것으로 나타났습니다.참조: https://github.com/zeit/now/issues/790
제가 직접 부딪혔지만, 여기 있는 어떤 해결책도 효과가 없었습니다.
마지막으로, 그 이유는 제가 잘못된 컨테이너를 가동하고 있었기 때문입니다.컨테이너/이름을 빌드하고 이전에 빌드된 컨테이너/이름:1.0을 실행하고 있었습니다.
즉, 동일한 컨테이너를 빌드하고 실행하는지 확인합니다.
최근에 이런 일이 몇 번 있었습니다.로서.Netdev, VisualStudio를 사용하여 빌드 이름을 변경했습니다.SomeThing
로.Something
DLL 이름으로 사용되지만 유지되는 .csproj 파일은 변경되지 않습니다.SomeThing.csproj
Docker 파일은 Linux 대소문자를 구분하는 파일 이름을 사용하므로 새로 생성된 Docker 파일이 복사하려고 했습니다.Something.csproj
찾을 수 없었던 것입니다.그래서 수동으로 파일 이름을 변경(소문자로 만들기)하여 모든 작업이 수행되었습니다.
하지만... 여기 경고문이 있습니다.Windows 노트북의 이 파일 이름 변경이 Git에 의해 선택되지 않아 저장소 원본이 여전히 유지되었습니다.SomeThing.csproj
및했습니다...repo 및 CI/CD 로커드가동일한이유로실다니습패했빌에도.
레포에 대한 커밋으로 파일 이름을 직접 변경해야 했습니다. 약간의 해결책이 있었지만 저는 계속했습니다.
tl;dr Windows OS에서 파일 이름 대소문자가 민감한지 확인하고 로컬 파일 이름이 Git 변경으로 선택되지 않으므로 CI/CD를 사용하는 경우 레포도 수정되었는지 확인합니다.
언급URL : https://stackoverflow.com/questions/32997269/copying-a-file-in-a-dockerfile-no-such-file-or-directory
'programing' 카테고리의 다른 글
JQuery 특정 클래스 접두사를 사용하여 첫 번째 부모 요소 찾기 (0) | 2023.08.24 |
---|---|
Use object keys given by JSON_SEARCH to find a different key in the same object in mysql/mariadb (0) | 2023.08.24 |
PowerShell에서 공간을 %20으로 바꾸려면 어떻게 해야 합니까? (0) | 2023.08.24 |
AJAX 웹 컨트롤을 쉽게 사용할 수 있는 방법 (0) | 2023.08.24 |
업데이트 패널에 중첩되어 있을 때 파일 업로드가 작동하지 않습니까? C# (0) | 2023.08.24 |