无法通过前端Dockerfile解决问题。

159

我对 Docker 还不太熟悉,正在尝试使用纯 HTML 构建 Docker 镜像,但是出现了以下错误信息:

无法使用 frontend 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"]

我在目录C:\Users\hailey\Desktop\GitTest中执行了命令docker build .,然后出现了以下结果:

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

我做错了什么?

30个回答

281

Docker文件的名称没有任何扩展名。它只是一个大写的 D 和小写的 fDockerfile

如果您想要指定Dockerfile的名称,可以使用docker build . -f Dockerfile.txt来指定其他名称。


3
哦,我只是删除了文件扩展名,它就有效了!非常感谢! - helloWORLD
7
即使文件名正确,我仍然遇到了这个错误。我成功解决的方法是添加了"-f Dockerfile",例如:docker build -t tagname . -f Dockerfile。 - ormurin
在我的测试中,dockerfile或没有扩展名的Dockerfile都可以工作;除此以外的任何东西都需要使用-f标志进行指定,就像下面的答案一样。 - cody.codes
10
提醒一下,检查一下你是否在项目根目录下。 - Baran Yeni
1
我因为和@BaranYeni写的一样的原因而犯了同样的错误。没有在项目根目录下。 - Chris
显示剩余5条评论

33

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

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

docker build . -f Dockerfile.base -t helloworld

然后,您可以使用以下命令开始构建镜像:
docker run --rm -it helloworld

1
我感觉很蠢。这不是我第一次使用docker了,我应该能够解释那个错误。谢谢! - Hebe Hilhorst
2
它之所以能工作是因为除非你的文件名精确为 dockerfile 或者 Dockerfile (没有扩展名),否则在使用 docker build 命令时,你需要告诉 docker 你要使用哪个文件来构建容器。同样重要的是,为了使其工作,你必须在运行该命令的相同目录中(这就是我首先查看此问题的原因)。 - cody.codes

26
我想把不同回答中的信息总结在一个回答中,并添加我的经验,这也是我提出这个问题的原因:
  1. 确保你在运行命令的目录中有包含dockerfile的文件夹(可以通过运行lsdir命令来判断是否存在用于构建docker容器的文件,具体取决于你使用的是Linux还是Windows/cmd shell)。
  2. Docker至少接受两个(也许只有两个?)默认名称的dockerfiles:dockerfileDockerfile。如果文件名中有其他大写字母,则很可能会失败。还要注意,默认文件名没有文件扩展名(因此,如果你使用记事本创建文件,它可能是.txt或其他默认扩展名)。这里有另一个答案展示了如何在记事本中保存没有文件名的文本,但你也可以在Linux和Windows命令提示符下使用以下命令:
    mv dockerfile.txt dockerfile
    ren dockerfile.txt dockerfile
  3. 如果你需要使用与默认dockerfile/Dockerfile不同的名称,则可以使用选项-f链接到文档),其说明如下:

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

下面是另一个回答中的示例:

  docker build . -f Dockerfile.base -t helloworld

为了将所有内容汇总,构建容器后您无需再次使用文件名,因此只需运行以下命令:

docker run --rm -it helloworld

我的Dockerfile在另一个目录中,将其移动到相同的目录下,问题得以解决。谢谢。 - Amrendra

16

如果您不真正需要使用buildkit:

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

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0

15

很抱歉听到您有问题。您确定要将文件命名为->“Dockerfile”吗?而不应该是“dockerfile”或“DockerFile”


是的,它解决了问题。 - Mahmoud Nasser

9
在我的情况下,问题在于文件名是正确的,但扩展名是txt
我打开了Notepad ++并粘贴了FROM mcr.microsoft.com/dotnet/aspnet:3.1这一行,然后像下面这样从Notepad ++保存了该文件。

Enter image description here

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

Enter image description here


手绘的高亮效果真棒! - undefined

7

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

1
我在“build”中使用了两个点(..),而不是一个点,因为其他解决方案都无法正常工作,所以我几乎要疯了... :) - benomatis

5

我遇到了同样的问题,结果发现我必须将Docker文件放在正确的文件夹中——即根项目文件夹。


4

1:确保 Docker 文件名称为“Dockerfile”,没有任何扩展名。

2:确保您正在运行命令的位置是 Dockerfile 所在的位置。


3
对我而言,我只需转到项目的根路径,即 Docker 文件所在的位置。

Enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接