【问题标题】:Can't create a docker image for COPY failed: stat /var/lib/docker/tmp/docker-builder error无法为 COPY 创建 docker 映像失败:stat /var/lib/docker/tmp/docker-builder 错误
【发布时间】: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 我没有问题。多谢兄弟!!上帝保佑你

标签: python docker dockerfile docker-image


【解决方案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】:
  1. Q1:检查构建路径中的.dockerignore文件,您要复制的文件或目录可能在忽略文件列表中!
  2. 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>
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2019-11-12
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-11-23
                      • 1970-01-01
                      • 2020-02-28
                      • 1970-01-01
                      相关资源
                      最近更新 更多