【问题标题】:failed to solve with frontend dockerfile无法使用前端 dockerfile 解决
【发布时间】:2022-01-25 08:32:36
【问题描述】:

我对 Docker 很陌生,并尝试使用纯 html 构建 docker 映像,但我收到此错误消息,说 使用前端 dockerfile.v0 无法解决:无法读取 dockerfile:打开 /var/lib/docker/tmp/buildkit-mount602954594/Dockerfile:没有这样的文件或目录

我的文件夹目录是这样的

C:\Users\hailey\Desktop\GitTest
                               |- Dockerfile.txt
                               |- README.md
                               |- testHelloWorld.html

在 Dockerfile 里面,我有

FROM ubuntu  
WORKDIR C/Users/hailey/Desktop/GitTest
COPY testHelloWorld.html .
EXPOSE 8080
CMD ["html","testHelloWorld.html"]

我执行了命令 docker build 。在目录 C:\Users\hailey\Desktop\GitTest 中。 然后得到了

[+] Building 0.1s (2/2) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                           
 => => transferring dockerfile: 2B                                                                                                                                             
 => [internal] load .dockerignore                                                                                                                                              
 => => transferring context: 2B                                                                                                                                               
failed to solve with frontend dockerfile.v0: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount602954594/Dockerfile: no such file or directory

还有谁知道我做错了什么吗?

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    检查 Dockerfile 的名称应该是“Dockerfile”

    【讨论】:

      【解决方案2】:

      确保您使用“ls”或“dir”命令查看列表。

      在我的例子中,我使用 Mac 的 Textedit 创建 Dockerfile,它有一个隐藏的 .rtf 扩展名。

      删除扩展后它起作用了。

      【讨论】:

        【解决方案3】:

        docker 文件名没有扩展名,只是Dockerfile,大写D,小写f

        你也可以指定 Dockerfile 名称,例如 docker build . -f Dockerfile.txt,如果你想给它起别的名字

        【讨论】:

        • 哦,我刚刚删除了文件扩展名,它运行良好!非常感谢!
        • 即使文件名正确,我也收到此错误。拯救我的是添加 -f Dockerfile,例如 docker build -t tagname 。 -f Dockerfile
        • 在我的测试中,dockerfileDockerfile 没有扩展工作;其他任何内容都需要使用-f 标志指定,如下面的答案所示。
        • 谢谢!我刚开始使用 Docker,我无意中将我的文件命名为 DockerFile 并开始收到 OP 报告的错误。根据您的启发性评论将其更改为Dockerfile 后,一切都开始工作了:)
        【解决方案4】:

        我在使用 react 应用时遇到了同样的问题。我不得不将 Dockerfile 从 src 移动到项目根文件夹并重新启动 docker desktop ...它工作正常。

        【讨论】:

          【解决方案5】:

          首先确保您在正确的目录中,并且 docker desktop 正在运行。

          【讨论】:

            【解决方案6】:

            对于那些使用docker-compose build的人,还要确保你在docker-compose.yml中正确设置了build路径:

            version: '3.8'
            
            services:
              web:
                build: ./services/web/ --> this folder should contain your Dockerfile, otherwise you will have the above error
            

            【讨论】:

              【解决方案7】:

              我得到了同样的错误:它可能是任何东西。我的不是什么具体的东西。我在配置中错误地命名和引用了其中一个文件,因此在尝试运行构建时找不到该文件。

              它与frontend dockerfile.v0(完全不同的文件)无关,请检查所有文件的名称和引用是否正确。

              【讨论】:

                【解决方案8】:

                重新启动 docker 桌面可能会有所帮助。它为我解决了问题

                【讨论】:

                • 欢迎来到 StackOverflow!这可以作为对问题的评论提供。
                【解决方案9】:

                我在运行“docker build -t getting-started”时遇到了同样的问题。从 Visual Studio Code 终端。

                但是当我在 CMD(Windows 10) 中执行相同的命令时,它没有问题。

                【讨论】:

                  【解决方案10】:

                  我在构建 Visual Studio 2019 生成的 docker 文件时遇到了类似问题。

                  >>使用前端 dockerfile.v0 解决失败:读取 dockerfile 失败:打开 /var/lib/docker/tmp/buildkit-mount037306220/dockerfile:没有这样的文件或目录

                  基本上,docker 文件是从 Windows 子系统 Linux (WSL) 中引用的。该工具安装了我的本地文件系统,并在 WSL 的上下文中访问 docker 文件。 由于Linux上文件名区分大小写,docker命令如实报错:

                  >> dockerfile:没有这样的文件或目录

                  Dockerfile 重命名为“dockerfile”解决了该问题。

                  【讨论】:

                    【解决方案11】:

                    你真的需要使用 buildkit 吗?如果没有:

                    尝试在执行构建/docker composer 之前设置这些 .envs:

                    export DOCKER_BUILDKIT=0
                    export COMPOSE_DOCKER_CLI_BUILD=0
                    

                    【讨论】:

                      【解决方案12】:

                      我想在一个答案中总结来自不同答案的信息,并添加我自己的经验让我想到这个问题:

                      1. 确保您位于包含您的 dockerfile 的目录与您运行命令的位置相同(运行 lsdir,具体取决于您分别使用 Linux 还是 Windows/cmd shell 来确定如果您将用于构建 docker 容器的文件存在于那里)
                      2. Docker 将接受至少两个(也许只有两个?)dockerfiles 的默认名称:dockerfileDockerfile。如果文件名中有其他大写字母,则很可能会失败。另请注意,默认文件名没有文件扩展名(例如,如果您要在记事本中创建文件,默认情况下它可能是 .txt 或其他扩展名)。这里还有另一个答案显示如何在没有文件名的情况下从记事本中保存它,但您也可以分别在 Linux 和 Windows 命令提示符下使用以下命令:
                        mv dockerfile.txt dockerfile
                        ren dockerfile.txt dockerfile
                      3. 如果您需要使用不同的名称而不是默认的dockerfile/Dockerfile,那么您可以使用选项-f (link to docs),它指出:

                      -f, --file string Dockerfile 的名称(默认为 'PATH/Dockerfile')

                      取自另一个答案,这是一个如何使用该命令的示例:

                        docker build . -f Dockerfile.base -t helloworld
                      

                      为了将它们组合在一起,一旦构建容器,您就不需要再次使用文件名,因此您可以运行它:

                      docker run --rm -it helloworld
                      

                      【讨论】:

                      • 为我工作。谢谢
                      【解决方案13】:

                      我也遇到了同样的问题,结果我不得不将 docker 文件放在正确的文件夹——根项目文件夹中。

                      【讨论】:

                        【解决方案14】:

                        可以使用-f 提供 docker 文件的文件名。

                        例如,如果您的 docker 文件名为 Dockerfile.base,则调用 build 命令如下:

                        docker build . -f Dockerfile.base -t helloworld
                        

                        然后,您可以使用以下命令启动构建映像:

                        docker run --rm -it helloworld
                        

                        【讨论】:

                        • ...好吧,我觉得自己很愚蠢。这不是我第一次使用 docker 进行牛仔竞技表演,我应该能够解释这个错误。谢谢!
                        • 它之所以有效,是因为除非您将 dockerfileDockerfile 作为确切的文件名(不带扩展名),否则您需要在使用 @ 时向 docker 指定要用于构建容器的文件987654328@ 命令。同样重要的是要注意,您必须在运行命令的同一目录中才能使其工作(为什么我首先发现自己在这个问题上)。
                        【解决方案15】:

                        我的问题是,文件名正确但扩展名是txt。 我所做的是,打开记事本++并粘贴此FROM mcr.microsoft.com/dotnet/aspnet:3.1 行,然后从记事本++中保存该文件,如下所示

                        文件保存后如下所示

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2021-01-21
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2022-01-12
                          • 2021-09-08
                          相关资源
                          最近更新 更多