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

vil*_*nux 137 docker dockerfile

我今天刚刚下载了适用于Windows 10 64bit的Docker Toolbox.我正在阅读教程.尝试使用Dockerfile构建映像时,我收到以下错误.

脚步:

  • 推出Docker Quickstart终端.
  • testdocker创建后.
  • 按照"构建您自己的映像"Web链接中的说明准备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
Run Code Online (Sandbox Code Playgroud)

kal*_*ari 163

执行以下命令时:

docker build -t docker-whale .
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢.我的问题是我在记事本中创建了我的Dockerfile,它自动将.txt附加到文件名. (23认同)
  • 您也可以使用`f`flag显式写入Dockerfile名称,如`docker build -f Dockerfile-dev.yaml -t my_container .`如果您的项目中有多个Dockerfile,每个环境一个,例.这同样适用于docker-compose.将它们放在不同的子目录中是行不通的,因为上下文(`.`)将不匹配. (5认同)
  • 记事本是一个过于邪恶的程序。 (3认同)

小智 33

如果您正在使用Windows 8,那么您将使用Docker工具箱.从mydockerbuild目录运行以下命令,因为Dockerfile是一个文本文件

docker build -t docker-whale -f ./Dockerfile.txt .
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要这样做,以供将来参考,这是因为Dockerfile具有扩展名,而默认情况下Docker期望它也没有。使用扩展名手动设置文件会增加您不需要的麻烦。您应该将Windows资源管理器设置为显示扩展名,然后删除该扩展名。 (3认同)

Sha*_*der 20

文件名应为Dockerfile而不应为.Dockerfile该文件不应具有任何扩展名。


Lut*_*elt 16

这是一个耻辱!

该错误信息是令人误解的。问题实际上与符号链接无关。通常只有docker无法找到描述构建的Dockerfile

典型原因如下:

  • Dockerfile 名称错误
    必须调用它Dockerfile。如果它被称为,例如dockerfile.DockerfileDockerfile.txt或其他,它不会被发现。
  • Dockerfile 不在上下文中
    如果您说的话docker build contextdir,Dockerfile必须位于contextdir/Dockerfile。如果您将它Dockerfile放进去,则说找不到它。
  • Dockerfile 不存在
    听起来很傻?好吧,在我编写了一个不错的Dockerfile之后,我从GitLab CI获得了以上错误消息,但是却忘记了检入它。当然。不太可能吗?没有。

这不是唯一的耻辱...

不仅此错误消息是模糊和混乱的。我通常会发现某些docker概念和许多文档在语义上不精确。

真正的坏处之一是“标记”概念(截至2019年8月)。根据您在文档中查找的位置,它会说出以下所有内容(或多或少清晰):

  • tag命令,但是您提供的参数不称为标签或标签名称,而是称为图像名称。
  • 图像名称由图像名称和标签组成,并用冒号分隔。
  • tag命令参数中,标记名称是可选的,但图像名称是必需的。明显。
  • 用文档页面的话来说:
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • 但是,并非该映像名称中的所有映像名称实际上都是该映像名称,因为该映像名称可以以主机名作为前缀。
  • 尽管有时该主机名部分认为是映像名称的一部分。
  • 在任何情况下,主机名都x位于(或之前,但以某种方式总是坚持使用)其映像名的映像,然后应驻留在该主机上x(在注册表中)。如果要访问此类图像,则或多或少必须使用带有主机前缀的该名称x
  • 但是具有该名称的映像可以驻留在任何主机上,而不仅是驻留在主机上x,因为将映像“推送”到x是单独的操作。
  • 因此,在Docker映像列表中看到该名称并没有多大意义,但肯定会暗示某些事情。有时是错误的。
  • 顺便说一句:我是否提到了名称空间?它们可以在主机名和映像名称中的映像名称之间切换。并且,根据您所处的位置,它们是否也是图像名称的一部分。

如果您对此感到困惑,那不是您的错。

结束语。

  • 文件名对我有用。我必须将 DockerFile 更改为“Dockerfile” (4认同)
  • 很好的答案,感谢您提供的背景信息 (2认同)
  • 同样,检查简单的拼写错误。我之所以来到这里,是因为 `Dockefile` 肯定与 `Dockerfile` 不同:facepalm:自从使用 `docker build -f <tab-completed filename> .` 进行构建后,我仔细一看,发现我输错了。 (2认同)

小智 16

  1. 确保您移动到 ​​Dockerfile 所在的目录。
  2. 确保您的 Dockerfile 没有扩展名。也就是说,不是 Dockerfile.txt、Dockerfile.rtf 或任何其他文件。
  3. 确保您命名为 Dockerfile,而不是 DockerFile、dockerfile 或任何其他名称。


小智 14

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

docker build -t image-name 
Run Code Online (Sandbox Code Playgroud)

它肯定会起作用.


Ala*_*ald 13

我已经命名了我的文件dockerfile而不是Dockerfile(大写),一旦我改变了它,它开始处理我的"Dockerfile".


aru*_*hpj 9

我有这个错误(在MacBook中)虽然我用正确的命令来创建图像,

docker build -t testimg .
Run Code Online (Sandbox Code Playgroud)

后来我发现路径就是问题所在.只需导航到包含docker文件的正确路径即可.只需仔细检查您当前的工作目录.没什么可惊慌的!


小智 7

这个命令对我有用:

docker build -t docker-whale -f Dockerfile.txt .
Run Code Online (Sandbox Code Playgroud)


小智 5

那只是因为记事本在Dockerfile的末尾添加了“.txt”