【问题标题】:Docker: unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesExDocker:无法准备上下文:无法评估 Dockerfile 路径中的符号链接:GetFileAttributesEx
【发布时间】:2016-06-01 09:33:08
【问题描述】:

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

步骤:

  • 已启动 Docker 快速入门终端。
  • 创建后测试docker。
  • 按照“构建您自己的映像”网络链接中的说明准备 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 上也是如此。
  • 令人震惊的错误消息。

标签: docker dockerfile docker-toolbox docker-build


【解决方案1】:

在执行以下命令时:

docker build -t docker-whale .

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

【讨论】:

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

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

典型的原因如下:

  • Dockerfile 名称错误
    它必须称为Dockerfile。如果被调用,例如dockerfile.DockerfileDockerfile.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> . 进行构建后,我仔细看了看才发现我打错了。
【解决方案3】:

如果您在 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 是一个纯文本文件。感谢朋友的帮助。
【解决方案4】:

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

【讨论】:

    【解决方案5】:
    1. 确保您已移至 Dockerfile 所在的目录。
    2. 确保您的 Dockerfile 没有扩展名。也就是说,不是 Dockerfile.txt、Dockerfile.rtf 或任何其他。
    3. 确保您命名为 Dockerfile,而不是 DockerFile、dockerfile 或任何其他名称。

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      • 我克隆了一个 json 文件,而不是创建一个新文件。一旦我将它重命名为 Dockerfile 并更新它的内容,它没有显示 .json 扩展名,后来意识到那是罪魁祸首!感谢您的来信!
      【解决方案7】:

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

      docker build -t image-name 
      

      它肯定会起作用。

      【讨论】:

        【解决方案8】:

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

        docker build -t testimg .
        

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

            在 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 确实如此没有完全实现 systemctl。完成 Windows Docker CE 安装并设置环境变量后,docker 在 WSL/Ubuntu 下可以正常工作。

            【讨论】:

            • 这对我有用!我只安装了 Docker Toolbox,并没有在 WSL 中安装它;相反,我直接使用 Windows 可执行文件,因为 WSL 现在可以做到这一点。
            【解决方案11】:

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

            【讨论】:

              【解决方案12】:

              这个命令对我有用:

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

              【讨论】:

              • Dockerfile 不是 .txt 文件。如果你把它作为一个 .txt 文件,它会再次报错。
              【解决方案13】:

              构建 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

              【讨论】:

                【解决方案14】:

                在 windows 10 中,句号是第一个参数

                docker build . -t docker-whale

                【讨论】:

                • 不再是(如果有的话)docker build -t docker-whale . 是一个有效的命令
                【解决方案15】:

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

                【讨论】:

                  【解决方案16】:

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

                  【讨论】:

                    【解决方案17】:

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

                    【讨论】:

                      【解决方案18】:

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

                      docker build C:\windows\your_amazing_directory

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

                      【讨论】:

                        【解决方案19】:

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

                        $ notepad Dockerfile 
                        

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

                        构建文件运行:

                        $ notepad Dockerfile
                        

                        现在运行:

                        $ docker build -t docker-whale .
                        

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

                        【讨论】:

                          【解决方案20】:

                          最重要的是确保您的文件名是 Dockerfile,如果您使用其他名称,它将无法正常工作(至少对我来说没有。)

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

                          【讨论】:

                            【解决方案21】:

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

                            docker build .\Docker-LocalNifi\ 
                            

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

                            【讨论】:

                              【解决方案22】:

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

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

                              【讨论】:

                                【解决方案23】:

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

                                docker build -t ihub -f Dockerfile.ihub .
                                

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

                                【讨论】:

                                【解决方案24】:

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

                                【讨论】:

                                  【解决方案25】:

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

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

                                  【讨论】:

                                    【解决方案26】:

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

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

                                    abc>DockerFile
                                    

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

                                    现在输入:

                                    notepad DockerFile 
                                    

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

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

                                    docker build -t docker-whale . 
                                    

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

                                    【讨论】:

                                      【解决方案27】:

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

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

                                      文件名只能是Dockerfile没有任何扩展名

                                      【讨论】:

                                        【解决方案28】:

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

                                        【讨论】:

                                          【解决方案29】:

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

                                          【讨论】:

                                            【解决方案30】:

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

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

                                            【讨论】:

                                              猜你喜欢
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 2019-10-27
                                              • 2020-12-06
                                              • 2020-11-29
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 1970-01-01
                                              相关资源
                                              最近更新 更多