Docker:无法准备上下文:无法评估Dockerfile路径中的符号链接:GetFileAttributesEx

Docker: unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx

我今天刚下载了Windows1064位的Docker工具箱。我正在复习教程。我在尝试使用dockerfile构建图像时收到以下错误。

步骤:

  • 启动了Docker快速启动终端。
  • 创建后的testDocker。
  • 准备Dockerfile,如"构建自己的图像"Web链接中所述
  • 在命令下运行

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.

顺便说一句:我尝试过提到的几个选项@https://github.com/docker/docker/issues/14339

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    $ 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


执行以下命令时:

1
"docker build -t docker-whale ."

检查dockerfile是否存在于当前工作目录中。


如果您使用的是Windows8,那么您将使用Docker工具箱。从mydockerbuild目录运行以下命令,因为dockerfile是文本文件

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


只需从dockerfile中删除扩展名.txt并运行命令

1
docker build -t image-name

这肯定会奏效的。


我把我的文件命名为dockerfile而不是dockerfile(大写),一旦我更改了它,它就开始处理我的"dockerfile"。


我(在MacBook中)得到了这个错误,尽管我使用了正确的命令来创建图像,

1
docker build -t testimg .

后来我发现路径是问题所在。只需导航到包含docker文件的正确路径。你只要再检查一下你当前的工作目录就行了。没什么好慌张的!


文件名应该是Dockerfile,而不是.Dockerfile。文件不应有任何扩展名。


在WSL中,路径转换似乎有问题。Ubuntu中dockerfile的位置(我运行docker的地方和dockerfile居住的地方)是"/home/sxw455/app1",但这些命令都不起作用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ 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中,实际路径是:

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

所以我必须这样做(即使我是从bash运行的):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ docker build -t friendlyhello
"C:\Users\sxw455\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState
ootfs\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.

在最初的安装过程中,我遇到了类似的环境变量问题,并遵循了一些建议,即安装Windows Dockerce并对环境变量进行黑客攻击,而不是安装Ubuntu Dockerce,因为(我希望我能正确记住这一点)WSL没有完全实现SystemCTL。一旦Windows Docker CE安装完成并设置了环境变量,Docker就可以在wsl/ubuntu下正常工作。


我用VS2017 Docker支持工具创建了我的Dockerfile,并且有相同的错误。过了一会儿,我意识到自己不在包含dockerfile (~\source
epos\DockerWebApplication\)
的正确目录中。CD'ED到正确的文件(~/source/repos/DockerWebApplication/DockerWebApplication),该文件位于项目内部,并成功创建了docker映像。


这只是因为记事本在Dockerfile的末尾添加了".txt"


在Windows 10中…句点是第一个参数

docker build . -t docker-whale


我最初是在PowerShell中创建Dockerfile的,虽然我没有看到文件的扩展名,但它显示为ps文件类型…一旦我从记事本+创建了文件,请确保选择"所有类型(.)"文件类型,但文件名(Dockerfile)没有扩展名。这使得我的图像构建命令成功完成….只要确保你的dockerfile有一个"file"类型…


问题是文件名应该是d ockerfile,而不是dockerfile或dockerfile。它应该是d capital后跟ockerfile,小写请注意。


确保文件名"dockerfile"没有以任何扩展名保存。只需创建一个没有任何扩展名的文件。

确保dockerfile在同一个目录中,您正试图从中构建docker映像。


要构建Dockerfile,请在Dockerfile中保存自动内容。不是dockerfile,因为在打开文件命令时:

1
$ notepad Dockerfile

(已写入文本文件,因此无法生成文件)

要生成文件,请运行:

1
$ notepad Dockerfile

现在运行:

1
$ docker build -t docker-whale .

确保您在dockerfile的当前目录中。


最重要的是,确保您的文件名是Dockerfile,如果您使用另一个名称,它将不起作用(至少对我来说不起作用)。

另外,如果您在dockerfile所在的同一目录中使用.,即docker build -t Myubuntu1:v1 .或使用绝对路径,即docker build -t Myubuntu1:v1 /Users//Desktop/Docker


我的案例(从Windows 10运行)1)将文件myDockerFile.Dockerfile重命名为Dockerfile(不带文件扩展名)。然后从文件夹外运行此命令:

1
docker build .\Docker-LocalNifi\

这对我和同事都有好处,希望这对你也有好处。


我在Windows上找到这个,当时我在一个交叉点目录下工作。所以我的解决办法是不要在那条路下工作。


在Mac上,它可以用于下面的命令。(希望您的.Dockerfile在根目录中)。

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

这个问题与dockerfile创建过程有关。

要正常工作,请将cmd、cd打开到感兴趣的目录,然后键入:

1
abc>DockerFile

这将在文件夹中创建一个名为dockerfile的文件。

现在类型:

1
notepad DockerFile

这将在记事本中打开dockerfile文件,您必须复制/粘贴提供的标准代码。

保存文件,现在,最后,用docker输入构建您的图像:

1
docker build -t docker-whale .

这对我有用,我希望它能帮助别人


我试过了,结果成功了:

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

请参见文件夹名称周围的引号+取消引号。

注:在文件夹"C:\Users\ssundarababu\Documents\Docker\Learn\SimpleDockerfile"中,我有我的dockerfile。