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


87

我想创建一个码头工人形象。这是我的工作目录: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`

谁能帮我?


12
dockerignore中是否是test.py或* .py?
杰伊·多尔西

3
test.py在Docker归档出口所在的当前目录中是否可用。
Jinna Balu

5
你有解决过这个吗?有同样的问题。
emmdee

2
Docker仍然在引擎上显示错误行为,恕我直言。我COPY在Dockerfile上使用了相同的语句,并且遇到了相同的问题。尝试COPY /host_file /container_folder(不带点),并且有效。之后,尝试使用COPY您在这里的前者,它可以正常工作(wtf?)!我与众不同的一件事是,删除了Docker在构建过程中生成的所有图像(缓存)。我的猜测是,垃圾可能仍会存储在这些中间映像上(我使用的是Docker 18.09.5)。看看SO或GitHub,有很多关于“复制主机->容器”的问题。凶兆。
ivanleoncz

1
哇,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,我没有问题。多谢兄弟!!上帝保佑你
理查德·里贝科

Answers:


51

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


因为我使用的是'from python:2.7-onbuild',所以无论如何它都从Dockerfile位置复制了所有同级文件和子文件。因此,我最终从Dockerfile中删除了COPY行,并且文件也被复制为同级文件。
库巴

2
如果这不起作用,请检查您的.dockerignore文件!
肯尼·埃维特

这对我有用。
cnu

42

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

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

2
这个对我有用,整个文件夹被忽略了,然后docker无法创建映像,给人留下了很不好的印象,使我对文件路径感到恼火。
Marco Medrano

这也为我工作。就我而言,我所指的文件夹位于.dockerignore中,因此已从其中删除。
杜尔加·卡帕

11
  1. 问题1:.dockerignore在构建路径中检查文件,您要复制的文件或目录可能在忽略文件列表中!
  2. Q2:COPY指令基于构建映像的上下文,因此请注意当前构建映像的目录是否存在任何问题!参见:https : //docs.docker.com/engine/reference/builder/#copy

.dockerignore是我的问题的根本原因!
朱明




2

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

我无法复制执行以下操作

COPY root/src /opt/src

1
我自己的问题有点不同,但多克的“问题”与奇路径引用该Dockerfile的文件夹上面的文件时是问题谢谢![Windows 10 + Powershell]。
RichW

1

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

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

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

这是一个错误吗?有人知道为什么这样做吗?这是唯一
有用的方法

1

另一个潜在的原因是,默认情况下docker将不遵循符号链接(即,不使用ln -s)。


1

就我而言,正是注释行弄乱了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 .     

希望它能帮助某人。


1

确保用于构建图像的上下文设置正确。您可以在构建参数时设置上下文。示例: docker build -f ./Dockerfile ..其中“ ..”是此示例中的上下文。


0

使用Docker compose文件时,发布,发布到obj / Docker / Publish。当我将文件复制到那里并将我的Dockerfile指向该目录(生成时)时,它可以工作……


0

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

COPY target / xyz.jar app.jar

添加target / xyz.jar app.jar

xyz jar应该位于当前目录/目标目录中-在这里current是存放docker文件的地方。因此,如果您在其他目录中有docker。最好将其带到主项目目录,并具有添加或复制到映像的jar的直接路径。


0

.tgz文件存在相同的问题。

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

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


0

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

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

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

COPY app ./

-1

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

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

然后运行它的命令!


1
嗨Nishant!值得详细说明您的解决方案。将文件从主机复制到容器,在Docker上仍然有些棘手。请提供示例以阐明您的答案。问候:)
ivanleoncz

-1

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

-7
 <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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.