用前端 Dockerfile 解决失败

我是相当新的多克,并试图建立一个简单的 HTML 多克图像,但我有这个错误消息,说

未能用前端 Dockerfile.v0解决: 未能读取 Dockerfile: open/var/lib/docker/tmp/buildkit-mount 602954594/Dockerfile: 没有这样的文件或目录

我的文件夹目录如下:

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


Inside of the Dockerfile, I have

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

I did my command docker build . inside of the directory C: 用户 Hailey 桌面 GitTest and then got:

[+] 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

What did I do wrong?

198315 次浏览

The name of Docker files doesn't have any extension. It's just Dockerfile with capital D and lowercase f.

您还可以指定 Dockerfile 名称,如果希望将其命名为其他名称,则可以使用 docker build . -f Dockerfile.txt

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

例如,如果 Docker 文件名为 Dockerfile.base,则按以下方式调用 build命令:

docker build . -f Dockerfile.base -t helloworld

Then, you can start the build image using the following command:

docker run --rm -it helloworld

我的案例中的问题是,文件名是正确的,但扩展名是 txt

我打开 记事本 + + 并粘贴 FROM mcr.microsoft.com/dotnet/aspnet:3.1行,然后从记事本 + + 中保存该文件,如下所示。

Enter image description here

一旦文件被保存,它将如下所示:

Enter image description here

如果你不需要使用 buildkit:

在执行 build/Docker 编译器之前,请尝试设置这些.envs:

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0

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

我想用一个答案来总结不同答案中的信息,同时也加上我自己的经验,正是这些经验让我想到了这个问题:

  1. Ensure that you're in the same directory that contains your dockerfile as where you're running your command from (running ls or dir depending on if you're using Linux or Windows/cmd shell respectively to determine if the file you'll use to build your docker container exists there)
  2. Docker 至少接受两个(也许只有两个?)Dockerfiles 的默认名称: dockerfileDockerfile。如果文件名中有其他大写字母,那么它很可能会失败。还要注意,默认的文件名没有文件扩展名(例如,如果要在记事本中创建文件,它可能是。Txt 或其他默认扩展名)。这里还有另外一个答案,告诉你如何在没有记事本文件名的情况下保存它,但是你也可以在 Linux 和命令提示符中分别使用以下命令:
    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

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

未能用前端 dockerfile.v0解决: 未能读取 dockerfile: open/var/lib/docker/tmp/buildkit-mount-037306220/dockerfile: 没有这样的文件或目录

实际上,Docker 文件是从 用于 Linux 的 Windows 子系统(WSL)内部引用的。该工具挂载了我的本地文件系统,并在 WSL 上下文中访问 Docker 文件。 由于 Linux 上的文件名区分大小写,Docker 命令忠实地报告了错误:

>> dockerfile: no such file or directory

文件夹重命名为“ 文件夹”解决了这个问题。

我在 VisualStudio 代码终端上运行“ docker build-t getting-start”时遇到了同样的问题。

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

我得到了同样的错误: 它可能是任何东西。我没有任何特定的... 我错误地命名和引用了配置中的一个文件,所以当尝试运行 build 时,它无法找到该文件。

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

对于那些使用 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

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

我在使用 React 应用程序时也遇到过同样的问题。我必须将 Dockerfile 从 src 移动到项目根文件夹并重新启动 Docker 桌面ーー它起作用了。

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

In my case I create Dockerfile using Mac's Textedit and it had a hidden .rtf extension.

在移除扩展之后,它工作了。

查一下 Dockerfile 的名字应该是“ Dockerfile”。

对于我来说,我只需要访问存在 Docker 文件的项目的根路径。

Enter image description here

这个错误的另一个问题是执行命令的位置。 对于某些人来说,从正确的目录(Dockerfile 所在的目录)运行命令并在创建 docker 文件时包含适当的变数命名原则可能是有用的。文件夹。

除了纠正 Dockerfile 名称之外,如果在末尾添加一个额外的点,也可能发生该错误

正如前面提到的... ... 我的问题是 DockerFile 的名称。我偶然得到了“ DockerFile”。

Changing the name to Dockerfile with the lowercase f and rerunning the build command fixed the issue for me.

将您的 Dockerfile.txt重命名为这个 文件夹。因为 dockerfile 没有扩展名。

由于网络问题,我遇到了这个问题。

只要使用香港服务器,一切顺利 ~

我解决了这个问题,给它完整的文件扩展名到我的 Dockerfile

docker build -t testapi . -f [YOUR_FILE_EXTENSION]/Dockerfile

当你给你的文件扩展名不给相对的一个给整个扩展名,如 D:/projects/asp6.0/publish/Dockerfile

对我来说,Dockerfile 位置的目录规范是错误的。我最初在 docker-compose 中指定了父目录(而不是实际存放 Dockerfile 的子目录)。Yml 文件。

很抱歉听到你的问题。你确定 命名你的文件-> “ DockerFile”? 它不应该是“ DockerFile”或“ DockerFile”