ChatGPT解决这个技术问题 Extra ChatGPT

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

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

脚步:

启动 Docker 快速入门终端。

创建后的testdocker。

按照“构建您自己的映像”Web 链接中的说明准备 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.

顺便说一句:我尝试了@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
更新: docker build -t XXX --file ./Dockefile 。工作。 Docker 可能希望为 Windows 用户更新他们的文档。
如果 docker build -t XXX --file ./Dockefile 可能是因为文件名错误,它缺少 R。
这是一个非常糟糕的错误消息,它只是意味着“无法打开文件”——在 Linux 和 macOS 上也是如此。
令人震惊的错误信息。

L
Liam

在执行以下命令时:

docker build -t docker-whale .

检查 Dockerfile 是否存在于您当前的工作目录中。


谢谢。我的问题是我在记事本中创建了 Dockerfile,它自动将 .txt 附加到文件名中。
您也可以使用 f 标志显式编写 Dockerfile 名称,如 docker build -f Dockerfile-dev.yaml -t my_container . 中所示,如果您的项目中有多个 Dockerfile,例如每个环境一个,这可能会很有用。这同样适用于 docker-compose。将它们放在不同的子目录中将不起作用,因为上下文 (.) 将不匹配。
@IanGSY 我希望我能给你更多的分数。这也正是我的问题!
记事本是一个非常邪恶的程序。
当您需要提醒您从错误的目录调用时 xD
D
Dan Grahn

错误消息具有误导性。这个问题实际上与符号链接无关。通常只是 docker 找不到描述构建的 Dockerfile。

典型的原因有这些:

Dockerfile 名称错误。它必须称为 Dockerfile。如果它被调用,例如,dockerfile、.Dockerfile、Dockerfile.txt 或其他,它将找不到。

Dockerfile 不在上下文中。如果你说 docker build contextdir,Dockerfile 必须在 contextdir/Dockerfile。如果您将它放在 ./Dockerfile 中,则不会找到它。

Dockerfile 根本不存在。听起来很傻?好吧,在我编写了一个不错的 Dockerfile 之后,我从 GitLab CI 收到了上述错误消息,但忘记签入它。傻吗?当然。不太可能?不。


我认为如果没有第二半,这将是一个更强大(和更相关)的答案。
很好的答案,感谢您提供背景信息
用同样的信息解决了我的问题的附加提示:确保您的 CaSing 正确。对于目录路径以及 Dockerfile。由于linux对此非常挑剔。
文件名对我有用。我不得不将 DockerFile 更改为 Dockerfile
同样,检查简单的拼写错误。我来到这里是因为 Dockefile 肯定与 Dockerfile 不同 :facepalm: 由于使用 docker build -f <tab-completed filename> . 构建工作,我仔细观察并意识到我输入错误了。
D
Divyanshu sachdeva

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

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

如果您需要这样做以供将来参考,那是因为您的 Dockerfile 具有扩展名,而默认情况下 Docker 也不期望它。使用扩展名手动设置文件会增加您不需要的麻烦。您应该将 Windows 资源管理器设置为显示扩展,然后删除扩展。
如果您按照 docker 文档“入门”教程进行操作,您可以使用:docker build -t friendlyhello -f ./Dockerfile.txt .
您还必须指定文件名和虚拟路径,这是非常糟糕的语义。和/或始终将您的文件命名为 Dockerfile.. :-(
这拯救了我的一天。顺便说一句,我正在使用Mac机器。但这里的问题是 Dockerfile 是一个纯文本文件。谢谢哥们的帮助。
S
SharpCoder

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


V
Vijayakumar Pattanashetti

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


Dockerfile 而不是 DockerFile 有很大帮助
A
Alan Fitzgerald

我将我的文件命名为 dockerfile 而不是 Dockerfile(大写),一旦我改变了它,它就开始处理我的“Dockerfile”。


我克隆了一个 json 文件而不是创建一个新文件。一旦我将它重命名为 Dockerfile 并更新它的内容,它没有显示 .json 扩展名,后来意识到那是罪魁祸首!感谢您的注意!
J
J. Chomel

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

docker build -t image-name 

它肯定会起作用。


a
arunprakashpj

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

docker build -t testimg .

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


A
Aurélien

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


C
Comissar

在 WSL 中,路径转换似乎存在问题。 Dockerfile 在 Ubuntu 中的位置(我正在运行 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.

在初始安装期间,我在环境变量方面遇到了类似的问题,并遵循了一些建议,即安装 Windows DockerCE 并破解环境变量而不是安装 Ubuntu DockerCE,因为(我希望我没记错)WSL 没有完全实现系统控制。一旦完成 Windows Docker CE 安装并设置环境变量,docker 就可以在 WSL/Ubuntu 下正常工作。


这对我有用!我只安装了 Docker Toolbox,并没有在 WSL 中安装它;相反,我直接使用 Windows 可执行文件,因为 WSL 现在可以做到这一点。
H
Hasan

我通过 VS2017 Docker 支持工具创建了我的 DockerFile,并且遇到了同样的错误。过了一会儿,我意识到我不在包含 Dockerfile (~\source\repos\DockerWebApplication\) 的正确目录中。 cd 到项目内的正确文件 (~/source/repos/DockerWebApplication/DockerWebApplication) 并成功创建了 docker 映像。


P
Pang

这个命令对我有用:

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

Dockerfile 不是 .txt 文件。如果您将其作为 .txt 文件保存,它将再次出错。
P
PontiusTheBarbarian

构建 dockerfile 的两种方法:

您可以决定不指定要构建的文件名,而只是指定路径来构建它(这样做,文件名必须为 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


c
ctrl-alt-delor

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

docker build . -t docker-whale


不再(如果有的话)docker build -t docker-whale . 是有效命令
H
Helper7123

我最初是在 PowerShell 中创建我的 Dockerfile,虽然我没有在文件上看到扩展名,但它显示为 PS 文件类型……一旦我从 Notepad++ 创建了文件,请确保选择“所有类型 (.)”文件在文件名 (Dockerfile) 上键入不带扩展名的类型。这使我的图像构建命令能够成功完成......只需确保您的 Dockerfile 具有“文件”类型......


v
vincent

问题是文件名应该是 Dockerfile 而不是 DockerFile 或 dockerfile 它应该是 D 大写,后跟小写的 ockerfile 请注意


F
Frank Odoom

确保您的 DOCKERfile 位于应用程序目录的根目录中,我在 src 中有我的,导致此错误,因为 Docker 未找到 DOCKERfile 的路径


r
rags2riches-prog

该错误表示 docker build 使用了输入错误的 PATH | URL,或者在当前目录中找不到 Dockerfile。此外,请确保在从集成终端(例如 IDE 或文本编辑器中的 bash)运行命令时,您具有执行此操作的管理员权限。如果您可以使用 pwd 从终端检查 PATH(如果在 Windows 上使用简单的 cli,则在 bash shelldir 中)并复制您想要构建图像的确切路径,这是最好的。

docker build C:\windows\your_amazing_directory

docker build --help 还将向您显示在出现格式错误或非法命令时可用的选项。


J
Javier C.

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

$ notepad Dockerfile 

(已写入文本文件,因此无法构建文件)

要构建文件运行:

$ notepad Dockerfile

现在运行:

$ docker build -t docker-whale .

确保您位于 Dockerfile 的当前目录中。


a
ady6831983

最重要的是确保您的文件名是 Dockerfile,如果您使用其他名称,它将不起作用(至少它不适合我。)

此外,如果您位于 Dockerfile 所在的同一目录中,请使用 .docker build -t Myubuntu1:v1 . 或使用绝对路径,即 docker build -t Myubuntu1:v1 /Users/<username>/Desktop/Docker


Y
Yohan

我的情况(从 Windows 10 运行)
1) 将文件 myDockerFile.Dockerfile 重命名为 Dockerfile不带文件扩展名)。
然后运行 from在文件夹之外这个命令:

docker build .\Docker-LocalNifi\ 

这对我和我的同事都有效,希望对你也有效


N
Nakesh

确保文件名“Dockerfile”未使用任何扩展名保存。只需创建一个没有任何扩展名的文件。

并确保 Dockerfile 与您尝试构建 docker 映像的目录位于同一目录中。


P
Purplejacket

如果我们的环境中有多个 docker 文件,那么 Dockerfile 将无法满足我们的要求。

docker build -t ihub -f Dockerfile.ihub .

所以使用 file(-f 参数)命令来指定你的 docker 文件(Dockerfile.ihub)


如上所示,还必须在行尾添加 .(点)。
docker build 的文档在这里:docs.docker.com/engine/reference/commandline/build
C
Chris F Carroll

当我工作的路径位于 Junction 目录下时,我在 Windows 上得到了这个。所以我的解决方法是不在该路径下工作。


c
caldera.sac

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

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

E
Employee

该问题与 DockerFile 创建过程有关。

为了工作,打开 cmd,cd 到感兴趣的目录并输入:

abc>DockerFile

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

现在输入:

notepad DockerFile 

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

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

docker build -t docker-whale . 

这对我有用,我希望它可以帮助其他人


i
iCantC

我在工作目录中错误地创建了 Dockerfile.txt,导致出现上述错误,而 build

解决方法是从文件中删除 .txt 扩展名

文件名应仅Dockerfile不带任何扩展名


A
Abdellah Ramadan

在您的项目目录中执行 docker build -t getting-started . 并确保 Dockerfile 存在并且没有 .txt 扩展名。如果您使用的是 Windows,请检查文件资源管理器中视图选项卡下的“文件扩展名”以显示 .txt 是否存在,如果前者为真,则将其删除。祝你好运。


Y
Yoshita Mahajan

我也遇到了同样的问题,当我创建用 DockerFile 命名的文件并提到了在创建任何图像时想要执行的所有命令时,它得到了解决。


G
Greg Domjan

如果您已将第二个驱动器作为“已安装卷”安装到 NTFS 文件夹,那么您可能会遇到此问题。

将您的文件移动到已安装卷之外的驱动器位置。