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

时间:2017-10-24 10:01:10

标签: python docker dockerfile docker-image

我想创建一个泊坞窗图片。这是我的工作目录: 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`

任何人都可以帮助我吗?

19 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:4)

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

docker build .

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

我无法复制执行以下操作

COPY root/src /opt/src

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

就我而言,正是注释行弄乱了COPY命令

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

错误的Dockerfile命令

 <dimen name="thirty">30</dimen>  

有效的Dockerfile命令

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

希望它对某人有帮助。

答案 7 :(得分:1)

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

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

添加 .dockerignore

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

答案 10 :(得分:0)

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

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

然后运行有效的命令!

答案 11 :(得分:0)

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

答案 12 :(得分:0)

泊坞窗从当前目录查找文件的方式 也就是说,如果您的命令是

COPY target / xyz.jar app.jar

ADD target / xyz.jar app.jar

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

答案 13 :(得分:0)

使用Docker撰写文件时,发布,发布到obj / Docker / Publish。当我将文件复制到此处并将Dockerfile指向该目录(生成时)时,它就可以工作了……

答案 14 :(得分:0)

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

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

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

答案 15 :(得分:0)

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

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

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

COPY app ./

答案 16 :(得分:0)

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

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

答案 17 :(得分:-1)

 <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>

答案 18 :(得分:-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