无法使用前端 DockerFIle.v0 解决

Muh*_*sir 84 docker dockerfile docker-compose gatsby

我试图为我的 Gatsby 应用程序构建我的 Docker 映像。每当我运行命令时 docker build . -t gatsbyapp,它都会给我一个错误:

failed to solve with frontend dockerfile.v0: failed to build LLB:
failed to compute cache key: "/.env" not found: not found
Run Code Online (Sandbox Code Playgroud)

同时我的 Dockerfile 如下所示:

FROM node:13

WORKDIR /app

COPY package.json .

RUN yarn global add gatsby-cli

RUN yarn install

COPY gatsby-config.js .

COPY .env .

EXPOSE 8000

CMD ["gatsby","develop","-H","0.0.0.0"]
Run Code Online (Sandbox Code Playgroud)

dim*_*ror 139

如果您使用 Windows 版 Docker,则需要在“设置”中从 Docker Engine 禁用 buildkit。它对我有用并解决了我的错误

将buildkit选项设置为false

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": false
  }
}
Run Code Online (Sandbox Code Playgroud)

Docker for Windows buildkit 选项

  • 这也适用于 MacOS。 (6认同)
  • 根据这个[文档](https://docs.docker.com/develop/develop-images/build_enhancements/),docker buildkit是一个可用于加速构建docker镜像过程的工具。 (2认同)
  • @pmac89 答案字面意思是它适用于 Windows。 (2认同)

Lui*_*eia 85

我遇到了同样的问题,我所要做的就是将 docker 配置文件名大写

dockerfile > 没用

Dockerfile > 工作了

  • 如果没有使用 -f 选项指定 docker 文件,它将在当前路径中搜索默认文件“Dockerfile”。使用“docker build -f dockerfile”你可以选择哪个文件是docker文件 (23认同)

Est*_*ens 67

在 mac 上升级到最新的 docker 桌面版本后,我遇到了这个问题。解决了这个问题的评论

解决方案:不要使用 buildkit,它对我有用。

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

  • 如果有人在 Windows 10 操作系统中遇到 docker Desktop 3.6.0 和 docker engine v 20.10.8 的问题。我将 buildkit 标志(在 settings=> docker engine =>features json node => json 中的 buildkit 属性)设置为 false 并解决了同样的问题。 (31认同)
  • 或者 `DOCKER_BUILDKIT=0 docker build ...` (27认同)
  • 在 Docker for Windows 上,可以在“设置”->“Docker 引擎”->“buildkit = false”中找到此选项 (12认同)
  • 这两行代码可以放在哪里 (2认同)
  • @SaherElgendy,你需要在macos终端中编写它。 (2认同)

小智 35

我有同样的问题。

Docker 文件名

  • Docker文件-错误
  • docker文件- 错误
  • D ockerfile - 工作!

您只需要一个大写字符。


小智 29

可能不是 op 的问题,但是我在尝试构建在 Windows 子系统 Linux (WSL) [Debian WSL2] 中运行的容器时遇到了这个问题,就在刚刚安装了 docker-compose 之后,我所要做的就是关闭 [ Debian] 终端并重新打开它,我的问题就解决了。

  • 哪个终端和哪个窗口? (3认同)
  • 在 Windows 主机中,WSL(Windows Subsystem for Linux)提供了一种运行基于 Linux 的命令的方法。这是通过在 Windows 中从 shell(类似 Linux)执行命令来完成的。我遇到过同样的问题。关闭外壳并再次打开它解决了。 (3认同)
  • 是的,对此进行更多详细说明会很有帮助,我正在使用 wsl 并且这在虚拟机中有效,但在 wsl 中无效。 (2认同)

小智 21

如果您使用的是 Mac 或 Windows 版Docker Desktop,您可能还必须在“Docker Engine”JSON 配置中禁用它。

\n

Docker Desktop \xe2\x86\x92 Settings \xe2\x86\x92 Docker Engine \xe2\x86\x92 将 "features": { buildkit: true} 更改为 "features": { buildkit: false}。

\n


小智 19

我不记得我在哪里读到这篇文章,但如果您使用WSL2并收到该错误,请删除 WSL2 主文件夹中的 Docker 配置文件并尝试重建映像。

也就是说,如果您已经检查了文件名并再次确认所有内容都命名正确(Dockerfile.dockerignore等)

WSL2 Ubuntu

rm ~/.docker/config.json
Run Code Online (Sandbox Code Playgroud)


Sam*_*son 15

如果您看到这个问题,它实际上并不是真正的问题。实际问题嵌套在错误日志中的某处。要查看实际问题,您需要像这样运行构建命令:

DOCKER_BUILDKIT=0  docker build .
Run Code Online (Sandbox Code Playgroud)

请注意DOCKER_BUILDKIT=0. 这将使构建工具包不会隐藏嵌套错误。从那里你应该能够谷歌正确的解决方案。

这也将使构建在命令行中看起来不同,但不要担心,只需查找错误即可。


Foo*_*Bar 13

就我而言,我试图wp-content从我正在构建的 docker 映像中的当前目录复制过来。像这样:

FROM wordpress:latest

# Copy wp-content
COPY ./wp-content/ ./var/www/html/wp-content/
Run Code Online (Sandbox Code Playgroud)

但是,我注意到我有一个.dockerignore文件,该文件明确被告知忽略wp-content.

当我从中取出时wp-content/.dockerignore它工作正常。


Tud*_*dor 11

禁用 Big Sur 虚拟化框架 在此处输入图片说明

  • 更新:最新的 docker 更新为我解决了这个问题 (3认同)

sar*_*arh 7

就我而言

无法使用前端 dockerfile.v0 解决:无法创建 LLB 定义:当前上下文中没有构建阶段

是由于在FROM之前设置ENV引起的。对于某些 Dockerfile 指令来说,这可能是不允许的。将 ENV 移到 FROM 之后后,错误就消失了。


chi*_*cio 6

确保您.dockerignore的文件与您的文件不匹配。


par*_*rsa 6

我的问题是由于使用 VPN 造成的。


Mon*_*rna 5

如果您使用的是 docker 桌面,重新启动 Docker 对我有用。故障排除 -> 重新启动

  • Monarindu 的目的是在 Docker Desktop 的 UI 级别执行此操作。您可以右键单击 Docker 徽标(位于系统托盘的图标中),然后选择“重新启动 Docker”选项,或者选择“故障排除”并在弹出的 UI 窗口中单击“重新启动”。如果您需要命令行解决方法,请检查此[https://forums.docker.com/t/restart-docker-service-from-command-line/27331/6] (7认同)
  • 疑难解答 -> 重新启动不是有效的 docker 命令。请尝试使用可以在终端中运行的有效命令来回答。 (2认同)

Bil*_* Ch 5

就我而言,我在“。”之后有一个额外的空间。在上下文选项中

docker build -t myapp .[EXTRA_SPACE_HERE]
Run Code Online (Sandbox Code Playgroud)

  • 为什么这很重要?shell 甚至不会将额外的空间传递给 `docker` 二进制文件,除非您引用它 (`". "`)。 (3认同)

tec*_*kuz 5

我有一个错字,

FROM apline:3.7代替FROM alpine:3.7

  • 是的,如果来源不存在,您也会得到这个。检查拼写并检查您的基地是否存在于您所在的位置。 (3认同)

Abh*_*D K 5

由于VPN连接,我遇到了这个问题。

我所要做的就是在Docker Desktop PROXIES部分设置手动代理:

在此输入图像描述


Yıl*_*maz 5

就我而言,这是因为文档中的用例表达不足。几乎所有示例都告诉您使用.and Dockerfile(大写 D),但它们大多没有明确告诉您如何自定义。

docker image build --tag any_image_tag --file any_file_name path_to_your_context_folder
Run Code Online (Sandbox Code Playgroud)

我觉得这个比较好,希望对来这里的人有所帮助。any_file_name实际上是任何包含构建指令的文件名。其中不需要“dockerfile”,但如果它与上下文文件夹不同,它有助于识别并提供完整路径。path_to_your_context_folder基本上是您的工作所在,例如 Web 应用程序。

例如,以下是我当前在 Windows 中的测试,其中COPY . /app使用上下文文件夹作为.

docker image build --tag nested_image --file C:\WorkSpace\myapp\dockerfiles\any_file_name C:\WorkSpace\myapp\contextfiles\
Run Code Online (Sandbox Code Playgroud)

PS:这个主题确实对同一问题有有趣的答案,但有很多奇怪的原因。我的只是一个隐藏在显而易见的问题的旁注。


小智 5

尝试使用这个简单的解决方案,将您的 dockerfile 命名为Dockerfile,不带扩展名。


小智 5

已经为我解决了

我使用的是MacBook Air (M1)并遇到了问题,因为我使用的是支持linux/amd64 的映像,而我的系统架构是arm64

因此,请确保运行基于您的设备的兼容映像。