无法使用前端 dockerfile 解决

hel*_*RLD 22 docker dockerfile docker-compose

我是 Docker 的新手,并尝试使用纯 html 构建 docker 映像,但我收到此错误消息,说 无法使用前端 dockerfile.v0 解决:无法读取 dockerfile:open /var/lib/docker/tmp/buildkit-mount602954594 /Dockerfile: 没有那个文件或目录

我的文件夹目录是这样的

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

Run Code Online (Sandbox Code Playgroud)

在 Dockerfile 里面,我有

FROM ubuntu  
WORKDIR C/Users/hailey/Desktop/GitTest
COPY testHelloWorld.html .
EXPOSE 8080
CMD ["html","testHelloWorld.html"]
Run Code Online (Sandbox Code Playgroud)

我做了我的命令 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
Run Code Online (Sandbox Code Playgroud)

有没有人有任何其他我做错了什么?

Gab*_*son 57

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

  • 提醒一下,检查一下你是否在项目根目录下 (10认同)
  • 即使文件名正确,我也收到此错误。拯救我的是添加 -f Dockerfile,例如 docker build -t tagname 。-f Dockerfile (2认同)

小智 16

如果您确实不需要使用 buildkit:

尝试在执行构建/Docker 编辑器之前设置这些 .env:

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0
Run Code Online (Sandbox Code Playgroud)


小智 16

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


kop*_*por 8

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

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

docker build . -f Dockerfile.base -t helloworld
Run Code Online (Sandbox Code Playgroud)

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

docker run --rm -it helloworld
Run Code Online (Sandbox Code Playgroud)

  • 它之所以有效,是因为除非您将“dockerfile”或“Dockerfile”作为确切的文件名(不带扩展名),否则您需要在使用“docker build”命令时向 docker 指定要使用哪个文件来构建容器。同样重要的是要注意,您必须位于运行命令的同一目录中才能使其工作(为什么我首先发现自己在这个问题上)。 (2认同)

小智 8

对于那些使用的人docker-compose build,还请确保您已正确设置build路径docker-compose.yml

version: '3.8'

services:
  web:
    build: ./services/web/ --> this folder should contain your Dockerfile, otherwise you will have the above error
Run Code Online (Sandbox Code Playgroud)


cod*_*des 6

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

  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链接到 docs),其中指出:

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

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

  docker build . -f Dockerfile.base -t helloworld
Run Code Online (Sandbox Code Playgroud)

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

docker run --rm -it helloworld
Run Code Online (Sandbox Code Playgroud)


Jay*_*hil 5

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

在此处输入图片说明

保存文件后,它将如下所示

在此处输入图片说明


小智 5

我刚刚遇到了同样的问题,结果我必须将 Docker 文件放在正确的文件夹 \xe2\x80\x94 根项目文件夹中。

\n