无法为 COPY 创建 docker 映像失败:stat /var/lib/docker/tmp/docker-builder 错误

Posted

技术标签:

【中文标题】无法为 COPY 创建 docker 映像失败:stat /var/lib/docker/tmp/docker-builder 错误【英文标题】:Can't create a docker image for COPY failed: stat /var/lib/docker/tmp/docker-builder error 【发布时间】:2018-04-05 01:51:26 【问题描述】:

我想创建一个 docker 镜像。这是我的工作目录: Dockerfile.in test.json test.py

这是我的 Dockerfile:

COPY ./test.json /home/test.json
COPY ./test.py /home/test.py

RUN python test.py

当我启动这个命令时: docker build -f Dockerfile.in -t 637268723/test:1.0 .

它给了我这个错误:

`Step 1/5 : COPY ./test.json /home/test.json
 ---> Using cache
 ---> 6774cd225d60
 Step 2/5 : COPY ./test.py /home/test.py
 COPY failed: stat /var/lib/docker/tmp/docker-builder428014112/test.py: 
 no such file or directory`

谁能帮帮我?

【问题讨论】:

你的 dockerignore 中是 test.py 还是 *.py? 在 Docker 提交 exitsts 的当前目录中是否有 test.py。 你解决过这个问题吗?遇到同样的问题。 Docker 仍然在其引擎上出现错误行为,恕我直言。我在我的 Dockerfile 上使用了相同的 COPY 语句,并且遇到了同样的问题。试过COPY /host_file /container_folder(没有点),它奏效了。在此之后,尝试了您在这里拥有的前COPY,它工作正常(wtf?)!我做出不同的一件事是删除 Docker 在构建过程中生成的所有图像(缓存)。我的猜测是,垃圾可能仍存储在这些中间图像上(我使用的是 Docker 18.09.5)。看看 SO 或 GitHub,有很多关于“复制主机 -> 容器”的问题。不祥之兆。 哇,ivanleoncz 谢谢我解决了这个问题。我有这个条款: ADD mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar 我在 mcint_swagger_hub-1.0.0.jar 之前放了一个简单的斜线,所以现在我得到这个:添加 /mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar 我没有问题。多谢兄弟!!上帝保佑你 【参考方案1】:

您应该将这些文件与 Dockerfile 放在同一目录中。

【讨论】:

因为我使用的是'from python:2.7-onbuild',所以无论如何它都会从 Dockerfile 位置复制所有兄弟文件和子文件。所以,我终于从 Dockerfile 中删除了 COPY 行,并且作为兄弟文件的文件也被复制了。 如果这不起作用,请检查您的 .dockerignore 文件! 我的script 部分gitlab-ci.yml 文件是:- cd cmd/ZpmHttpServer/ - apk add git - go get - go build -o ../../ZPMOddajaNalog_API。缺少以下部分:../../ 这是 Dockerfile 不在同一目录中的原因。【参考方案2】:

检查是否有.dockerignore文件,如果有,添加:

!mydir/test.json
!mydir/test.py

【讨论】:

这个对我有用,整个文件夹都被忽略了,然后 docker 无法创建图像,给人留下了不好的印象,让我对文件路径很生气。 这对我也有用。就我而言,我所指的文件夹位于 .dockerignore 中,因此已从中删除。【参考方案3】:
    Q1:检查构建路径中的.dockerignore文件,您要复制的文件或目录可能在忽略文件列表中! Q2:COPY 指令基于您正在构建映像的上下文,因此请注意您当前正在构建映像的目录的任何问题!见:https://docs.docker.com/engine/reference/builder/#copy

【讨论】:

.dockerignore 是我的问题的根本原因!【参考方案4】:

从源路径中删除 ./ 应该可以解决您的问题:

 COPY test.json /home/test.json
 COPY test.py /home/test.py

【讨论】:

在可能的情况下我把它们放在docker忽略哦不:D @Mugen 很高兴我的评论救了你的命;) @Adiii 你也救了我的命。【参考方案5】:

我必须使用以下命令来开始构建:

docker build .

【讨论】:

这对我有用,谢谢。码头工人建造。 --no-cache【参考方案6】:

我也面临同样的问题,我将 docker 文件移动到项目的根目录。然后就成功了

【讨论】:

【参考方案7】:

确保您构建图像的上下文设置正确。您可以在构建时设置上下文作为参数。 例子: docker build -f ./Dockerfile .. 其中 '..' 是本例中的上下文。

【讨论】:

谢谢!!!这对我帮助很大。我使用的是docker build - < docker/gpu.Dockerfile,但现在我尝试了docker build -f docker/gpu.Dockerfile .,效果很好【参考方案8】:

在我的例子中,是注释行弄乱了 COPY 命令

我删除了 COPY 命令后的注释并将其放在命令上方的专用行中。令人惊讶的是它解决了这个问题。

Dockerfile 命令错误

COPY qt-downloader .     # https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions

工作 Dockerfile 命令

# https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions
COPY qt-downloader .     

希望对某人有所帮助。

【讨论】:

【参考方案9】:

在您的情况下,删除 ./ 应该可以解决问题。我有另一种情况,其中我使用父目录中的目录,docker 只能访问 Dockerfile 所在目录下的文件 所以如果我有一个目录结构 /root/dir 和 Dockerfile /root/dir/Dockerfile

我无法复制,请执行以下操作

COPY root/src /opt/src

【讨论】:

我自己的问题有点不同,但是当引用包含 Dockerfile 的文件夹上方的文件时,Docker 的“问题”具有奇怪的路径是问题谢谢! [Windows 10 + Powershell]。【参考方案10】:

这可能会帮助其他面临类似问题的人。

不要将文件浮动在与 Dockerfile 相同的目录中,而是创建一个目录并放置要复制的文件,然后尝试。

COPY mydir/test.json /home/test.json
COPY mydir/test.json /home/test.json

【讨论】:

这是一个错误吗?有人知道为什么会这样吗?这是唯一有帮助的事情【参考方案11】:

另一个潜在的原因是 docker 默认不会跟随符号链接(即不使用ln -s)。

【讨论】:

【参考方案12】:

我在尝试构建 docker 映像并推送到容器注册表时遇到了这样的错误。在我的 docker 文件中,我尝试从目标文件夹中复制一个 jar 文件并尝试使用 java -jar 命令执行它。

我通过从 .gitignore 文件中删除 .jar 文件和目标文件夹来解决问题。

【讨论】:

【参考方案13】:

使用 Docker 撰写文件时,发布,发布到 obj/Docker/Publish。当我在那里复制我的文件并将我的 Dockerfile 指向这个目录(如生成的)时,它可以工作......

【讨论】:

【参考方案14】:

docker查找文件的方式是从当前目录 即如果你的命令是

复制目标/xyz.jar app.jar

添加目标/xyz.jar app.jar

xyz jar 应该在 current/target 目录中 - 这里 current 是您的 docker 文件所在的位置。 因此,如果您在不同的目录中有 docker。最好把它带到主项目目录,并有一个直接路径到要添加或复制到图像的 jar。

【讨论】:

【参考方案15】:

我对 .tgz 文件也有同样的问题。

这只是关于文件的位置。确保文件在 Dockerfile 的同一目录中。

还要确保 .dockerignore 文件目录不排除文件正则表达式模式。

【讨论】:

【参考方案16】:

就我而言,我必须将所有项目文件放到一个子目录中

app -|inside app directory we have the following
     | package.js
     | src 
     | assets
Dockerfile

然后我以他的方式复制文件

COPY app ./

【讨论】:

【参考方案17】:

这是发生这种情况的原因,即您运行 docker 的主机操作系统中的本地目录应该有该文件,否则您会收到此错误

一种解决方案是: 使用RUN cp <src> <dst> 而不是 COPY <src> <dst>

然后运行命令就可以了!

【讨论】:

嗨,Nishant!用更多细节来表达你的解决方案是值得的。将文件从主机复制到容器,在 Docker 上仍然是一件棘手的事情。请举例说明您的答案。问候:)【参考方案18】:

docker-compose.yaml 中的以下结构将允许您将 Dockerfile 放在根目录的子文件夹中:

version: '3'
services:
  db:
    image: postgres:11
    environment:
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - postgres-data:/var/lib/postgresql/data
    ports:
      - 127.0.0.1:5432:5432
  **web:
    build: 
      context: ".."
      dockerfile: dockerfiles/Dockerfile**
    command: ...
...

然后,在与 docker-compose.yaml 位于同一目录的 Dockerfile 中,您可以执行以下操作:

ENV APP_HOME /home

RUN mkdir -p $APP_HOME

# Copy the file to the directory in the container
COPY test.json $APP_HOME/test.json
COPY test.py $APP_HOME/test.py

# Browse to that directory created above
WORKDIR $APP_HOME

然后您可以从父目录运行 docker-compose,例如:

docker-compose -f .\dockerfiles\docker-compose.yaml build --no-cache

【讨论】:

【参考方案19】:
 <plugin>
    <groupId>io.fabric8</groupId>

    <artifactId>docker-maven-plugin</artifactId>
    <configuration>
      <images>
        <image>
          <name>imagenam</name>
          <alias>dockerfile</alias>
          <build>
            <!-- filter>@</filter-->
            <dockerFileDir>dockerfile loaction</dockerFileDir>
            <tags>
            <tag>latest</tag>
            <tag>0.0.1</tag>
            </tags>
          </build>
          <run>
            <ports>
              <port>8080:8080</port>
            </ports>
          </run>
        </image>
      </images>
    </configuration>
  </plugin>

【讨论】:

以上是关于无法为 COPY 创建 docker 映像失败:stat /var/lib/docker/tmp/docker-builder 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中使用相同的 docker 文件构建 docker 映像的 Azure Pipeline 失败

无法将 mysql docker 容器与 Spring Boot 应用程序链接 - 通信链接失败

使用 Docker 文件中的 COPY 将文件夹从 Windows 主机操作系统复制到 Docker 映像中

为 NodeJS + PostgreSQL Web 应用程序创建 Docker 映像

gcloud auth configure-docker 失败(config.json 无法读取为 JSON)

无法运行已在使用的 gitlab docker 映像端口