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

366
我刚刚下载了适用于Windows 10 64位的Docker Toolbox。我正在按照教程进行操作,但在尝试使用Dockerfile构建映像时出现以下错误。
步骤: - 启动Docker Quickstart终端。 - 创建testdocker并启动。 - 按照“构建自己的映像”网页中的文档准备Dockerfile。 - 运行以下命令:
``` docker build -t docker-whale . ```
错误信息:$ docker build -t docker-whale .
无法准备上下文:无法评估Dockerfile路径中的符号链接:GetFileAttributesEx C:\Users\Villanueva\Test\testdocker\Dockerfile:系统找不到指定的文件。
顺便说一句:我尝试了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

10
更新:docker build -t XXX --file ./Dockefile . 成功了。Docker可能需要为Windows用户更新他们的文档。 - villanux
4
如果docker build -t XXX --file ./Dockefile执行失败了,可能是因为您的文件名错了,漏掉了 R。 - eXa
40
这是一个非常糟糕的错误提示,它的意思只是“无法打开文件”,在Linux和macOS上都一样。 - RichVel
5
令人大吃一惊的糟糕错误信息。 - lmat - Reinstate Monica
41个回答

341
执行以下命令时,
docker build -t docker-whale .

请检查当前工作目录中是否存在Dockerfile。


35
谢谢。我的问题是我在记事本中创建了Dockerfile,它自动在文件名末尾添加了.txt的扩展名。 - IanGSY
19
您也可以使用f标志来明确指定Dockerfile的名称,例如docker build -f Dockerfile-dev.yaml -t my_container .。如果您的项目中有多个Dockerfile,例如每个环境一个,则这可能会证明很有用。同样适用于docker-compose。将它们放在不同的子目录中不起作用,因为上下文(.)不匹配。 - Sumi Straessle
1
@IanGSY,我希望我能给你更多的积分。那正是我的问题! - K. Brafford
11
记事本是一个极其恶劣的程序。 - Per Lundberg
当你需要一个提醒,告诉你正在从错误的目录中调用时 xD - Kraken
显示剩余4条评论

245

错误信息误导

问题实际上与符号链接无关。 通常情况下,问题仅仅是Docker找不到描述构建的Dockerfile文件

典型原因如下:

  • Dockerfile 命名错误。 它必须被称为Dockerfile。如果它被称为例如dockerfile.DockerfileDockerfile.txt或其他,则无法找到它。
  • Dockerfile 不在上下文中。 如果你说docker build contextdir,则Dockerfile必须位于contextdir/Dockerfile。如果你将其放在另一个位置,比如./Dockerfile,它将无法找到。
  • Dockerfile 根本不存在。 听起来很傻?嗯,我从我的GitLab CI收到了以上错误消息,当时我已经写了一个漂亮的Dockerfile,但我忘记了提交它。愚蠢?当然。不可能?不是。

1
我认为如果没有第二部分,这个答案会更加强大(并且更相关)。 - Paul Gear
2
很棒的答案,感谢提供背景信息。 - leon.io
解决了我遇到的相同问题的额外提示:确保大小写正确,无论是目录路径还是Dockerfile。因为Linux对此非常挑剔。 - RaimondB
4
文件名对我很有帮助。我必须将DockerFile更改为Dockerfile - Junaid
2
同样地,检查简单的拼写错误。我来到这里是因为Dockefile显然不同于Dockerfile :facepalm:由于使用docker build -f <tab-completed filename> .构建成功,我仔细查看后发现我打错了字。 - Saites
这应该是被接受的答案,因为它解释了错误(特别是它非常无用)。 - Jack G

48
如果你正在使用 Windows 8,那么你将会使用 Docker 工具箱。
mydockerbuild 目录中,运行以下命令,因为你的 Dockerfile 是一个文本文件:
docker build -t docker-whale -f ./Dockerfile.txt .

4
如果您需要这样做,那是因为您的Dockerfile有一个扩展名,而默认情况下Docker不希望有扩展名。手动设置带有扩展名的文件会增加您不需要的麻烦。您应该将Windows资源管理器设置为显示文件扩展名,然后删除扩展名以备未来参考。 - Alex
如果您正在遵循 Docker 文档中的“入门”教程,您将使用以下命令: docker build -t friendlyhello -f ./Dockerfile.txt . - Mike Kellogg
你必须指定文件名和虚拟路径,这真的是一个糟糕的语义。或者总是将文件命名为Dockerfile.. :-( - myloginid
这个救了我的一天。顺便说一下,我正在使用Mac机器。但是问题在于Dockerfile是一个纯文本文件。感谢你的帮助。 - Sachidananda Naik

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

28
  1. 确保您切换到存放Dockerfile的目录。
  2. 确保您的Dockerfile没有扩展名,即不是Dockerfile.txt、Dockerfile.rtf或其他任何扩展名。
  3. 确保您的Dockerfile文件名为Dockerfile,而不是DockerFile、dockerfile或其他任何名称。

在编写Dockerfile时,使用大写的F会带来很大的帮助。 - Ukrainian-serge

20

我把文件命名为dockerfile而不是Dockerfile(首字母大写),一旦我改正了这个问题,它就开始处理我的“Dockerfile”。


1
我克隆了一个JSON文件而不是创建一个新文件。一旦我将其重命名为Dockerfile并更新其内容,它就不显示.json扩展名,后来意识到这就是罪魁祸首!感谢提醒! - Ayyappa

16
只需从Dockerfile中删除扩展名 ".txt" 并运行命令。
docker build -t image-name

它一定会起作用。


11

我在一台MacBook上使用正确的命令创建镜像,但是出现了这个错误。

docker build -t testimg .

后来我发现问题出在路径上。只需导航到包含Docker文件的正确路径即可。请仔细检查您当前的工作目录。不必惊慌!


7
这个命令对我有效:

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

1
Dockerfile不是一个.txt文件。如果您将其保存为.txt文件,它会再次出现错误。 - Donald Shahini

5

这只是因为NotepadDockerfile的末尾添加了".txt"。


而且Windows将其隐藏了? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接