【问题标题】:An error, "failed to solve with frontend dockerfile.v0"错误,“无法使用前端 dockerfile.v0 解决”
【发布时间】:2021-01-21 02:24:59
【问题描述】:

我正在尝试为我的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

同时我的 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"]

【问题讨论】:

  • 我是 VTC 这个问题需要更多关注。您可能会收到此错误的原因有很多,请查看下面的多个完全不同的答案。
  • Office VPN 对我来说是个问题。
  • 这个问题需要更多细节。 .env 文件是否真的存在?
  • 原因之一可能是 docker 文件的权限。遇到错误的人还会检查错误消息,“安全警告:您正在从 Windows 针对非 Windows Docker 主机构建 Docker 映像。添加到构建上下文的所有文件和目录都将具有 '-rwxr-xr-x' 权限。它建议仔细检查并重置敏感文件和目录的权限。"

标签: docker docker-compose dockerfile gatsby


【解决方案1】:

我在 Mac 上升级到最新的 Docker Desktop 版本后遇到了这个问题。解决了this issue上的评论。

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

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0

【讨论】:

  • @SaherElgendy,你需要在macos终端写。
  • DOCKER_BUILDKIT=0 docker build ...
  • 如果有人在 Windows 10 操作系统中遇到 docker desktop 3.6.0 和 docker engine v 20.10.8 的问题。我将 buildkit 标志(在 settings=> docker engine =>features json node => buildkit 属性在 json 中)设置为 false 并解决了同样的问题..
  • 在 Docker for Windows 上,这个选项可以在 Settings -> Docker Engine -> buildkit = false 中找到
  • 谢谢。为我解决了 macOS 上的问题。
【解决方案2】:

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

dockerfile > 没用

Dockerfile> 确实有效

【讨论】:

  • 如果不使用 -f 选项指定 docker 文件,它会在当前路径中搜索默认文件“Dockerfile”。使用“docker build -f dockerfile”你可以选择哪个文件是docker文件
  • 这为我指明了正确的方向。 Windows 已将“.txt”添加到我的 Dockerfile 中。删除它并解决问题。
  • 在构建命令中始终使用-f ./Dockerfile 是一个好习惯
  • 我使用文本编辑创建了一个 Dockerfile,默认情况下它提供了一个扩展名:.rtf。但是mac没有显示扩展名。所以请确保 Dockerfile 没有隐藏的扩展...
  • 如果在docker-compose.yaml 文件中使用docker-compose 将dockerfile: 设置为Dockerfile
【解决方案3】:

可能不是 OP 遇到的问题,但我在尝试构建在 Windows Subsystem for Linux (WSL) (Debian WSL2) 内运行的容器时遇到了这个问题,就在刚刚安装了 Docker Compose 之后,我所要做的就是关闭(Debian)终端并重新打开它,我的问题就解决了。

【讨论】:

  • 哪个终端和哪个窗口?
  • 是的,对此进行更多详细说明会有所帮助,我正在使用 wsl,这在 vm 中有效,但在 wsl 中无效。
  • 在 Windows 主机中,WSL(Windows Subsystem for Linux)提供了一种运行基于 linux 的命令的方法。这是通过在 Windows 中从 shell(类似 Linux)执行命令来完成的。我遇到过同样的问题。关闭外壳并再次打开它解决了它。
  • 就我而言,(在我的 Windows 10 PC 上)我没有运行 WSL,但我打开了多个 CMD 窗口以及 Microsoft 终端但是,我正在从 VSCode 终端运行 docker build .在我关闭 Microsoft Terminal 和 CMD 窗口后,它就开始工作了。
  • 为我工作! ¯_(ツ)_/¯
【解决方案4】:

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

DOCKER_BUILDKIT=0  docker build .

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

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

【讨论】:

  • 这对我来说是正确的答案。以前构建不会立即退出,将 DOCKER_BUILDKIT=0 添加到我的构建脚本似乎已经完全回避了这个问题,一切都“正常工作”。我仍然对为什么不将其设置为零失败感到困惑,但这实际上是我整个问题的解决方案。谢谢分享!
  • 这是正确答案或引导我找到答案。 +1
  • 真棒,简单,解释清楚...我删除了一个中间步骤并忘记了它...¯_(ツ)_/¯
  • 这很有用!我的是一个平台问题,但通过这个命令我能够弄清楚。好东西!
  • 这解决了整个问题。不知道为什么,不在乎。谢谢!
【解决方案5】:

如果您使用的是 Docker Desktop,重新启动 Docker 对我有用。 疑难解答重启

【讨论】:

  • 疑难解答 -> 重新启动不是有效的 docker 命令。请尝试使用可以在终端中运行的有效命令进行回答。
  • Monarindu 的本意是在 Docker 桌面的 UI 级别。您可以右键单击 Docker 徽标(在系统托盘的图标中找到),然后选择重新启动 Docker 选项或选择故障排除并在弹出的 UI 窗口中单击重新启动。如果您需要命令行解决方法,请查看此 [forums.docker.com/t/restart-docker-service-from-command-line/…
  • 这对我有用。谢谢!
【解决方案6】:

我也有同样的问题。

Docker 文件名

  • DockerFile - 错误
  • dockerFile - 错误
  • Dockerfile - 工作!

您只需要一个大写字符。

【讨论】:

  • 我遇到了同样的问题。案例事项
  • 这里也一样。 DockerFIle(坏)--> Dockerfile(好)
【解决方案7】:

在我的例子中,我试图从我正在构建的 Docker 映像中的当前目录中复制文件夹 wp-content。像这样:

FROM wordpress:latest

# Copy wp-content
COPY ./wp-content/ ./var/www/html/wp-content/

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

当我从 .dockerignore 中删除 wp-content/ 时,它工作正常。

【讨论】:

  • 我在 .dockerignore 文件中有一个忽略所有 *,将其删除,一切正常。谢谢。
【解决方案8】:

禁用macOS v11 (Big Sur) 虚拟化框架:

【讨论】:

  • 更新:最新的 docker 更新为我解决了这个问题
【解决方案9】:

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

有时与.dockerignore 一起使用的模式是向其添加通配符,并使用!filename 语法将特别预期的文件排除在上下文中。例如:

*
!Cargo.toml
!Cargo.lock
!src
!setup.py
!README.md
!project
!requirements
__pycache__

如果您稍后尝试使用 Dockerfile 中的文件,它将匹配通配符并且不会出现在上下文中。向新文件添加例外或删除通配符以解决此问题。

【讨论】:

  • 你能举个例子吗?请通过changing your question/answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
  • @PeterMortensen 刚刚做到了。感谢您的评论。
【解决方案10】:

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

docker build -t myapp .[EXTRA_SPACE_HERE]

【讨论】:

  • 这有什么关系?除非您引用它 (". "),否则 shell 甚至不会将额外的空间传递给 docker 二进制文件。
  • 这对我来说真的很神奇。我不知道为什么。哈哈
  • 完全不知道
  • 你确定这是一个正常的空间吗?不是一些Unicode的东西吗? NO-BREAK SPACEhair space、EM SPACE 还是类似的?
  • @PeterMortensen 这是一个正常的空间,因为我直接在终端上执行此命令。我不记得是我输入的所有内容还是从某个地方复制的。
【解决方案11】:

如果您使用 Docker for Windows,您需要禁用 buildkit。它对我有用。

buildkit 选项设置为 false

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": false
  }
}

【讨论】:

    【解决方案12】:

    就我而言

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

    是由在 FROM 之前设置 ENV 引起的。某些 Dockerfile 指令可能不允许这样做。在 FROM 之后立即移动 ENV 后,错误就消失了。

    【讨论】:

      【解决方案13】:

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

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

      WSL2Ubuntu:

      rm ~/.docker/config.json
      

      【讨论】:

        【解决方案14】:

        如果您在 Mac 或 Windows 上使用 Docker Desktop,您可能还必须在“Docker 引擎”JSON 配置中禁用它。

        Docker 桌面 → 设置Docker 引擎 → 将“功能”:{ buildkit:true} 更改为“功能”:{ buildkit:false}。

        【讨论】:

          【解决方案15】:

          我在磁盘空间用完时遇到了这个问题,大概是由于我在调整和调整我的 Dockerfile 时积累的大量图像层缓存而加剧了这个问题。

          【讨论】:

            【解决方案16】:

            我必须在我的~/.docker/config.json ... 中设置"credsStore": ""。它之前设置为 credentials.exe

            In WSL2 ddev start fails at docker-credential-desktop.exe, "error listing credentials" #2342

            【讨论】:

            • 大概是在 Windows 上?
            【解决方案17】:

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

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

            【讨论】:

            • 就我而言,我不得不使用“手动 DNS 配置”。
            【解决方案18】:

            就我而言,我遇到了两个问题:

            1. 我错过了 .在提供上下文选项的命令末尾,以及
            2. 我在 Dockerfile 的文件名中有一个“.txt”扩展名。

            经过这两次调整,一切正常。

            【讨论】:

              【解决方案19】:

              有错别字,

              FROM apline:3.7 而不是FROM alpine:3.7

              【讨论】:

              • 是的,如果源不存在,你也会得到这个。检查拼写并检查你的基地是否存在于你从中拉出的地方。
              【解决方案20】:

              我遇到了同样的错误,但是将 Dockerfile 移出子文件夹并移到我的应用程序的根文件夹中。它修复了错误消息。

              【讨论】:

                【解决方案21】:

                有时这种错误来自愚蠢的语法错误...... 就我而言,我修改了一个 Dockerfile 并删除了一些环境变量,但忘记从最后一行删除反斜杠...

                    WORDPRESS_HTTPS_PORT="8443" \
                    WORDPRESS_HTTP_PORT="8080" \
                    WORDPRESS_SKIP_INSTALL="yes" \ <-- to be removed
                
                EXPOSE 8080 8443
                USER 0
                

                【讨论】:

                  【解决方案22】:

                  我在通过Visual Studio 2019 构建 Docker 映像时遇到了同样的问题。我的 Docker 文件的名称类似于 Dockerfile。

                  Dockerfile > 没有工作

                  dockerfile > 确实有效

                  【讨论】:

                  • hahhahaha dockerfile.txt 也不行))
                  • 你确定吗?不是反过来吗?
                  【解决方案23】:

                  附和发生在我身上的另一种可能性:如果您使用的是构建阶段,请确保您始终使用正确的阶段名称。

                  我有一个用

                  定义的阶段

                  FROM zzz AS development

                  后来被用于另一个阶段

                  FROM development AS yyy

                  一时兴起,我将development 更改为dev,但仅在第一次出现。所以后者仍然是FROM development,而前者是AS dev

                  奇怪的是,对于一个如此小的错误,错误消息是多么神秘......你会认为他们可能只是让错误消息说“找不到development”之类的。

                  【讨论】:

                    【解决方案24】:

                    确保您使用的是相同的平台,例如 如果您使用

                    构建第一个图像(my-custom-service)
                    FROM --platform=linux/amd64 node:14
                    

                    那么你需要将--platform添加到其他使用第一个基础镜像的Dockerfiles:

                    FROM --platform=linux/amd64 my-custom-service
                    

                    【讨论】:

                    • 这对我有用。目前我正在使用 macbook air m1 芯片组,在不同的环境下工作,比如 windows。该解决方案帮助我花费大量时间寻找解决方案:)
                    【解决方案25】:

                    我在使用 WSL2 Ubuntu 时遇到了这个问题,我通过更改 Dockerfile 的权限解决了这个问题。

                    当我在我的计算机上设置 WSL2 时,我将我的一些文件(包括 Dockerfile)直接从 Windows 复制到 Ubuntu root folder,这显然会导致文件权限为空白:

                    ---------- 1 user user 10M Jan 1 00:00 Dockerfile
                    

                    为了修复它,我运行了chmod 644 Dockerfile

                    -rw-r--r-- 1 user user 10M Jan 1 00:00 Dockerfile
                    

                    之后,Docker 能够构建映像而没有任何进一步的问题。

                    【讨论】:

                      【解决方案26】:

                      对我来说,错误如下:

                      使用前端 dockerfile.v0 无法解决:创建 LLB 定义失败:请求失败:Head https://registry-1.docker.io/v2/library/postgres/manifests/13-alpine:net/http:TLS 握手超时

                      我在 Windows 10 和 Docker Desktop 中使用 WSL2,我在将 Docker Desktop 更新到 3.5 版后遇到了这个问题。

                      我通过启用 WSL 与其他 distributions 的集成解决了这个问题。

                      启用它:

                      在 Windows 中打开 Docker 桌面并转到设置资源WSL 集成启用与其他发行版的集成 并为您安装的 Ubuntu 应用程序启用它。

                      【讨论】:

                        【解决方案27】:

                        通过设置HTTP_PROYYHTTP_PROXYS 环境变量来指定代理服务器。

                        例子:

                        http_proxy=http://username:password@proxy.example.com:8080
                        https_proxy=http://username:password@proxy.example.com:8080
                        

                        【讨论】:

                          【解决方案28】:

                          在我有一个用于构建多个 Dockerfile 的脚本并且其中一个 Dockerfile 被注释掉之前,我遇到过这个问题/错误。 一旦我取消注释 Dockerfile 并再次运行脚本,它对我来说就很好了。

                          【讨论】:

                            【解决方案29】:

                            如果你有类似的项目结构

                            ├── docker                   
                            │   │
                            │   ├── app
                            │   │   └── Dockerfile
                            │   └── mlflow  
                            │       └── Dockerfile
                            │
                            └── docker-compose.yml
                            

                            您可能缺少在docker-compose.yml 中指定build: context

                            version: '3'
                            
                            services:
                            
                              mlflow:
                                build: 
                                  context: ./
                                  dockerfile: ./docker/mlflow/Dockerfile
                                container_name: ml_app_mlflow
                                volumes:
                                  - ./db:/db
                                ports:
                                  - 5000:5000
                            

                            【讨论】:

                              【解决方案30】:

                              如果您使用Windows Subsystem for Linux (WSL),请在启动窗口之前检查 Docker 是否正在运行。如果您在启动窗口后启动了 Docker。然后只需重新启动您的终端。如果您的文件正确,它应该可以工作。

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2023-01-03
                                • 2021-09-08
                                • 1970-01-01
                                • 2021-02-28
                                • 1970-01-01
                                • 2021-10-29
                                相关资源
                                最近更新 更多