Docker : 컨텍스트를 준비 할 수 없음 : Dockerfile 경로에서 심볼릭 링크를 평가할 수 없음 : GetFileAttributesEx


189

오늘 Windows 10 64 비트 용 Docker Toolbox를 다운로드했습니다. 튜토리얼을 진행하겠습니다. Dockerfile을 사용하여 이미지를 만들려고 할 때 다음 오류가 나타납니다.

단계 :

  • Docker Quickstart 터미널을 시작했습니다.
  • 그것을 만든 후 testdocker.
  • "나만의 이미지 만들기"웹 링크에 설명 된대로 Dockerfile 준비
  • 아래 명령을 실행

docker build -t docker-whale .

Error: $ docker build -t docker-whale .

unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx C:\Users\Villanueva\Test\testdocker\Dockerfile: The system cannot find the file specified.

BTW : https://github.com/docker/docker/issues/14339에서 언급 한 여러 옵션을 시도했습니다.

    $ docker info
    Containers: 4
     Running: 0
     Paused: 0
     Stopped: 4
    Images: 2
    Server Version: 1.10.1
    Storage Driver: aufs
     Root Dir: /mnt/sda1/var/lib/docker/aufs
     Backing Filesystem: extfs
     Dirs: 20
     Dirperm1 Supported: true
    Execution Driver: native-0.2
    Logging Driver: json-file
    Plugins:
     Volume: local
     Network: bridge null host
    Kernel Version: 4.1.17-boot2docker
    Operating System: Boot2Docker 1.10.1 (TCL 6.4.1); master : b03e158 - Thu Feb 11 22:34:01 UTC 2016
    OSType: linux
    Architecture: x86_64
    CPUs: 1
    Total Memory: 996.2 MiB
    Name: default
    ID: C7DS:CIAJ:FTSN:PCGD:ZW25:MQNG:H3HK:KRJL:G6FC:VPRW:SEWW:KP7B
    Debug mode (server): true
     File Descriptors: 32
     Goroutines: 44
     System Time: 2016-02-19T17:37:37.706076803Z
     EventsListeners: 0
     Init SHA1:
     Init Path: /usr/local/bin/docker
     Docker Root Dir: /mnt/sda1/var/lib/docker
    Labels:
     provider=virtualbox

4
업데이트 : docker build -t XXX --file ./Dockefile. 일했다. Docker는 Windows 사용자를 위해 설명서를 업데이트 할 수 있습니다.
villanux

4
만약 docker build -t XXX --file ./Dockefile당신이이 R.를 누락 파일 이름 잘못 가지고 있기 때문에 수 있습니다
EXA

17
이것은 놀랍게도 나쁜 오류 메시지입니다. Linux 및 macOS에서와 마찬가지로 "파일을 열 수 없습니다"라는 의미입니다.
RichVel

엄청나게 나쁜 오류 메시지.
한정된 속죄

답변:


205

다음 명령을 실행하는 동안 :

docker build -t docker-whale .

Dockerfile이 현재 작업 디렉토리에 있는지 확인하십시오.


28
감사. 내 문제는 메모장에서 Dockerfile을 만들었고 파일 이름에 .txt가 자동으로 추가되었다는 것입니다.
IanGSY

5
또한 명시 적으로 Dockerfile 이름을 쓸 수 있습니다 f같이 플래그 docker build -f Dockerfile-dev.yaml -t my_container .는 예를 들어, 프로젝트, 환경 당 하나의 여러 Dockerfile이있는 경우이 유용 할 수 있습니다. docker-compose에도 동일하게 적용됩니다. 컨텍스트 ( .)가 일치 하지 않으므로 다른 하위 디렉토리에 배치하면 작동 하지 않습니다.
Sumi Straessle

1
@IanGSY 더 많은 포인트를 줄 수 있기를 바랍니다. 그것은 바로 내 문제였습니다!
K. Brafford

5
메모장은 지나치게 악한 프로그램입니다.
Per Lundberg

98

부끄러운 일입니다!

오류 메시지가 잘못되었습니다. 이 문제는 심볼릭 링크와 전혀 관련이 없습니다. 일반적으로 docker는 빌드를 설명하는 Dockerfile찾을 수 없습니다 .

일반적인 이유는 다음과 같습니다.

  • Dockerfile의 이름잘못되었습니다 .
    호출되어야합니다 Dockerfile. 호출 될 경우, 예를 들어 dockerfile, .Dockerfile, Dockerfile.txt, 또는 다른이를 찾을 수 없습니다.
  • Dockerfile이 컨텍스트에 없습니다 .
    말할 경우 docker build contextdirDockerfile은에 있어야합니다 contextdir/Dockerfile. 예를 들어, ./Dockerfile대신 들어 있으면 찾을 수 없습니다.
  • Dockerfile 이 전혀 존재하지 않습니다 .
    바보 같습니까? 글쎄, 멋진 Dockerfile을 작성한 후 GitLab CI에서 위의 오류 메시지를 받았지만 체크인하는 것을 잊었습니다. 확실한. 있을 것 같지 않게? 아니.

부끄러운 일이 아닙니다 ...

이 하나의 오류 메시지 만이 모호하고 혼란 스럽습니다. 나는 일반적으로 일부 도커 개념과 많은 문서가 의미 상 부정확하다는 것을 알았습니다.

정말 나쁜 점 중 하나는 "태그"라는 개념입니다 (2019 년 8 월 기준). 문서에서 보는 위치에 따라 다음 사항을 모두 명확하게 나타냅니다.

  • 거기입니다 tag그것은 이미지 이름이라고, 명령,하지만 당신이 제공 한 인수가 아닌 태그 또는 태그 이름이라고합니다.
  • 이미지 이름은 이미지 이름과 태그로 구성되며 콜론으로 구분됩니다.
  • 에서 tag명령 인수, 태그 이름은 선택 사항이지만 이미지 이름은 필수입니다. 분명한.
  • 설명서 페이지에서 다음과 같이 말합니다.
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • 그러나 이미지 이름 앞에 호스트 이름을 붙일 수 있기 때문에 해당 이미지 이름의 모든 이미지 이름이 실제로 이미지 이름 인 것은 아닙니다.
  • 때때로 해당 호스트 이름 부분 이미지 이름의 일부로 간주됩니다.
  • 어쨌든 호스트 이름 x을 가진 이미지 는 (또는 이전에는, 그러나 마술 적으로 항상 붙어있는) 이미지 이름은 해당 호스트에 있어야합니다 x(레지스트리에서). 이러한 이미지에 액세스하려면이 이름을 host prefix와 함께 사용해야합니다 x.
  • 그러나 이미지를 x"푸시"하는 x작업은 별도의 작업 이므로 해당 이름을 가진 이미지는 on뿐만 아니라 모든 호스트에 존재할 수 있습니다 .
  • 따라서 도커 이미지 목록에서 그 이름을 보는 것은별로 의미가 없지만 확실히 무언가를 해칠 것입니다. 때때로 잘못되었습니다.
  • 그건 그렇고 : 네임 스페이스를 언급 했습니까? 이미지 이름에서 호스트 이름과 이미지 이름 사이를 이동할 수 있습니다. 그리고 당신이 보는 위치에 따라 이미지 이름의 일부입니다.

이것으로 혼란스러워하는 것은 당신의 잘못 이 아닙니다 .

rant의 끝.


나는 이것이 후반이 없다면 훨씬 더 강력하고 (보다 관련성이 높은) 대답이라고 생각합니다.
Paul Gear

1
훌륭한 답변과 배경 정보에 대한 감사
leon

같은 메시지로 문제를 해결 한 추가 정보 : CaSinG가 올바른지 확인하십시오. Dockerfile뿐만 아니라 디렉토리 경로의 경우. 리눅스는 그것에 대해 꽤 까다롭기 때문에.
RaimondB

38

Windows 8에서 작업하는 경우 Docker 도구 상자를 사용합니다. Dockerfile이 텍스트 파일이므로 mydockerbuild 디렉토리에서 아래 명령을 실행하십시오.

docker build -t docker-whale -f ./Dockerfile.txt .

3
나중에 참조 할 필요가 있다면 Dockerfile에는 확장자가 있지만 기본적으로 Docker는 확장자가 없기 때문입니다. 확장명을 사용하여 파일을 수동으로 설정하면 필요하지 않은 두통이 추가됩니다. 확장명을 표시하고 확장명을 제거하도록 Windows 탐색기를 설정해야합니다.
Alex

docker documentation "시작하기"튜토리얼을 따르는 경우 다음을 사용하십시오.docker build -t friendlyhello -f ./Dockerfile.txt .
Mike Kellogg

파일 이름과 더미 경로도 지정해야한다는 의미가 잘못되었습니다. 및 / 또는 항상 파일 이름을 Dockerfile.로 지정하십시오. :-(
myloginid

이것은 나의 하루를 구했다. 그건 그렇고, 나는 Mac 컴퓨터를 사용하고 있습니다. 그러나 여기서 중요한 것은 Dockerfile이 일반 텍스트 파일로 만들어 졌다는 것입니다. 도움을 주셔서 감사합니다.
Sachidananda Naik

23

파일 이름은 Dockerfile아니 어야합니다 .Dockerfile. 파일 확장자는 없어야합니다.


14

Dockerfile (대문자) 대신 내 파일 dockerfile의 이름을 지정했으며 일단 변경하면 "Dockerfile"처리가 시작되었습니다.


14

Dockerfile에서 확장자 .txt를 제거하고 명령을 실행하십시오.

docker build -t image-name 

확실히 작동합니다.


9

올바른 명령을 사용하여 이미지를 만들었지 만이 오류가 발생했습니다 (MacBook).

docker build -t testimg .

나중에 경로가 문제라는 것을 알았습니다. docker 파일이 들어있는 올바른 경로로 이동하십시오. 현재 작업 디렉토리를 다시 확인하십시오.


4

Windows 10에서 ... 기간이 첫 번째 매개 변수입니다

docker build . -t docker-whale


8
더 이상 docker build -t docker-whale .유효한 명령은 아닙니다
sebagomez


4

WSL에서 경로 변환에 문제가있는 것 같습니다. Ubuntu에서 Dockerfile의 위치 (Docker를 실행하고 Dockerfile이있는 위치)는 "/ home / sxw455 / App1"이지만 다음 명령 중 어느 것도 작동하지 않았습니다.

$ pwd
/home/sxw455/App1
$ ll
total 4
drwxrwxrwx 0 sxw455 sxw455 4096 Dec 11 19:28 ./
drwxr-xr-x 0 sxw455 sxw455 4096 Dec 11 19:25 ../
-rwxrwxrwx 1 sxw455 sxw455  531 Dec 11 19:26 Dockerfile*
-rwxrwxrwx 1 sxw455 sxw455  666 Dec 11 19:28 app.py*
-rwxrwxrwx 1 sxw455 sxw455   12 Dec 11 19:27 requirements.txt*

$ docker build -t friendlyhello .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx C:\Windows\System32\Dockerfile: The system cannot find the file specified.

$ docker build -t friendlyhello "/home/sxw455/App1"
unable to prepare context: path "/home/sxw455/App1" not found

그러나 Windows에서 실제 경로는 다음과 같습니다.

C:\Users\sxw455\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\sxw455\App1

그래서 나는 이것을해야했습니다 (bash에서 그것을 실행하더라도) :

$ docker build -t friendlyhello 
"C:\Users\sxw455\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\sxw455\App1"

Sending build context to Docker daemon   5.12kB
Step 1/7 : FROM python:2.7-slim
 ---> 0dc3d8d47241
Step 2/7 : WORKDIR /app
 ---> Using cache
 ---> f739aa02ce04
Step 3/7 : COPY . /app
 ---> Using cache
 ---> 88686c524ae9
Step 4/7 : RUN pip install --trusted-host pypi.python.org -r requirements.txt
 ---> Using cache
 ---> b95f02b14f78
Step 5/7 : EXPOSE 80
 ---> Using cache
 ---> 0924dbc3f695
Step 6/7 : ENV NAME World
 ---> Using cache
 ---> 85c145785b87
Step 7/7 : CMD ["python", "app.py"]
 ---> Using cache
 ---> c2e43b7f0d4a
Successfully built c2e43b7f0d4a
Successfully tagged friendlyhello:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

초기 설치 중에 환경 변수와 비슷한 문제가 있었고 Wbun이 완전히 구현되지 않았기 때문에 Ubuntu DockerCE를 설치하는 대신 Windows DockerCE를 설치하고 환경 변수를 해킹한다고 말하는 몇 가지 조언을 따랐습니다. systemctl. Windows Docker CE 설치가 완료되고 환경 변수가 설정되면 docker는 WSL / Ubuntu에서 제대로 작동합니다.


이것은 나를 위해 일했다! Docker Toolbox 만 설치했으며 WSL에는 설치하지 않았습니다. 대신 WSL이 지금 할 수 있기 때문에 Windows 실행 파일을 직접 사용하고 있습니다.
Lawrence Lee

4

VS2017 Docker Support 도구로 DockerFile을 만들었으며 동일한 오류가 발생했습니다. 잠시 후 Dockerfile을 포함하는 올바른 디렉토리에 있지 않다는 것을 깨달았습니다 (~\source\repos\DockerWebApplication\). (~/source/repos/DockerWebApplication/DockerWebApplication)프로젝트 안에 있는 올바른 파일로 cd 하고 docker 이미지를 성공적으로 만들었습니다.


4

아래 명령은 docker build -t docker-whale -f Dockerfile.txt 작동했습니다.


Dockerfile은 .txt 파일이 아닙니다. .txt 파일로 사용하면 다시 오류가 발생합니다.
Donald Shahini

3

도커 파일을 작성하는 두 가지 방법 :

빌드 할 파일 이름을 지정하지 않고 경로를 지정하여 빌드 만 할 수 있습니다 (이 방법으로 파일 이름에 Dockerfile확장자가 추가되지 않아야합니다 . 예 :docker build -t docker-whale:tag path/to/Dockerfile

또는

당신이 가진 파일을 지정할 수 -f있으며 (이유에서 무엇을 확장 문제가되지 않습니다 .txt, .dockerfile, .Dockerfile당신은 예를 들어, 사용하기로 결정 등을) docker build -t docker-whale:tag /path/to/file -f docker-whale.dockerfile.


2

원래 PowerShell에서 Dockerfile을 만들었지 만 파일에 확장명이 보이지 않지만 PS 파일 형식으로 표시됩니다. 일단 메모장에서 파일을 만들면 "모든 형식 ( . )"파일 을 선택해야합니다 . 파일 이름 (Dockerfile)에 확장자없이 입력하십시오. 내 이미지 빌드 명령이 성공적으로 완료되었습니다 .... Dockerfile의 유형이 "파일"인지 확인하십시오 ...


2

문제는 파일 이름이 DockerFile이 아니고 DockerFile 또는 dockerfile이 아닌 D 대문자이어야하고 소문자 pls에서 ockerfile이되어야한다는 것입니다.


2

귀하 DOCKERfile의 응용 프로그램 디렉토리 루트에 있는지 확인하십시오 .Src에 광산이있어 Docker가 경로를 찾지 못했기 때문에이 오류가 발생했습니다DOCKERfile


1

Dockerfile을 빌드하려면 자동 컨텐츠를 Dockerfile에 저장하십시오. 파일 명령을 여는 동안 Dockerfile이 아닙니다.

$ notepad Dockerfile 

(텍스트 파일이 작성되어 파일을 작성할 수 없음)

파일을 빌드하려면

$ notepad Dockerfile

이제 다음을 실행하십시오.

$ docker build -t docker-whale .

Dockerfile의 현재 디렉토리에 있는지 확인하십시오.


1

가장 중요한 것은 파일 이름이 Dockerfile 다른 이름을 사용하면 작동하지 (적어도 나에게는 그렇지 않았습니다).

또한 Dockerfile이 .ie를 사용하는 동일한 디렉토리에 docker build -t Myubuntu1:v1 . 있거나 절대 경로를 사용하는 경우 docker build -t Myubuntu1:v1 /Users/<username>/Desktop/Docker


1

내 경우 (Windows 10에서 실행)
1) 파일 이름 myDockerFile.DockerfileDockerfile( 파일 확장자 없이 )로 바꿉니다 .
그런 다음 실행 에서 폴더 명령 외부 :

docker build .\Docker-LocalNifi\ 

이것은 저와 직장 동료들을 위해 일하고 있습니다. 희망이 당신에게도 효과가 있기를 바랍니다.


1

파일 이름 "Dockerfile"이 확장자로 저장되어 있지 않은지 확인하십시오. 확장자없이 파일을 만드십시오.

Dockerfile이 docker 이미지를 작성하려는 디렉토리와 동일한 디렉토리에 있는지 확인하십시오.



0

작업중 인 경로가 Junction 디렉토리 아래에있을 때 Windows에서 이것을 얻었습니다. 그래서 내 수정은 그 길에서 작동하지 않는 것이 었습니다.


0

Mac 에서는 아래 명령에서 작동합니다. ( .Dockerfile당신의 루트 디렉토리에 있기를 바랍니다 ).

docker build -t docker-whale -f .Dockerfile .

0

이 문제는 DockerFile 작성 절차와 관련이 있습니다.

작동하려면 cmd, cd를 원하는 디렉토리로 열고 다음을 입력하십시오.

abc>DockerFile

폴더 안에 DockerFile이라는 파일이 생성됩니다.

이제 다음을 입력하십시오.

notepad DockerFile 

그러면 DockerFile 파일이 메모장에서 열리고 제공된 표준 코드를 복사 / 붙여 넣기해야합니다.

파일을 저장하고 마지막으로 Docker를 입력하여 이미지를 작성하십시오.

docker build -t docker-whale . 

이것은 나를 위해 일하고 있으며 다른 사람들을 돕기를 바랍니다.


0

Dockerfile.txt작업 디렉토리에 잘못 생성 되어 위에서 언급 한 오류가 발생했습니다.build

수정은 파일 에서 .txt확장명제거하는 것이 었습니다 .

파일 이름은해야 Dockerfile에만 확장자없이 .


0

docker build -t getting-started .프로젝트 디렉토리에서 실행 하고 Dockerfile이 있고 .txt확장자 가 없는지 확인하십시오 . Windows에있는 경우 파일 탐색기의보기 탭 아래에있는 '파일 이름 확장자'를 확인하여 .txt가 있는지 여부를 표시하고 전자가 사실 인 경우이를 제거하십시오. 행운을 빕니다.


0

나는 또한 같은 문제에 직면했고 DockerFile이라는 이름의 파일을 만들었을 때 해결되었고 모든 이미지를 만드는 동안 실행되기를 원하는 모든 명령을 언급했습니다.


0

오류 는 잘못 입력되었거나 현재 디렉토리에서 찾을 수 없음을 docker build사용하고 있음을 의미합니다 . 또한 통합 터미널 (예 : IDE 또는 텍스트 편집기) 에서 명령을 실행할 때 관리자 권한이 있는지 확인하십시오 . 터미널에서 를 확인 하거나 ( Windows 에서 간단한 것을 사용하는 경우 ) 이미지를 빌드 할 정확한 경로를 복사하는 것이 가장 좋습니다.PATH | URLDockerfilebashPATHpwdbash shelldircli

docker build C:\windows\your_amazing_directory

docker build --help 또한 명령이 잘못되었거나 불법 인 경우 사용할 수있는 옵션을 보여줍니다.


-1

나는 이것을 시도하고 효과가 있었다 :

$ docker build -t test_dotnet_image 
"C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"

폴더 이름 주위에 따옴표 + 따옴표를 참조하십시오.

참고 : 폴더 "C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"에는 Dockerfile이 있습니다.


-1

Windows / Linux의 명령 줄에서 이미지를 빌드합니다. 1. 현재 디렉토리에 도커 파일을 만듭니다. 예 : FROM ubuntu RUN apt-get update RUN apt-get -y install apache2 ADD. / var / www / html ENTRYPOINT apachectl -D FOREGROUND ENV 이름 Devops_Docker 2. .txt 확장자로 저장하지 마십시오. 3. 명령 행에서 command docker build를 실행하십시오. -t 아파치

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.