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

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

And this is my 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`

Can anyone help me?

157431 次浏览

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

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

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

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

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

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

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

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

!mydir/test.json
!mydir/test.py
 <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>

这就是为什么会发生这种情况的原因,也就是说,运行 docker 的主机操作系统中的本地目录应该有这个文件,否则就会得到这个错误

一个解决办法是: 使用 RUN cp <src> <dst>代替 COPY <src> <dst>

然后运行命令,它的工作!

在你的情况下,移除。我应该解决这个问题。还有一种情况,我使用父目录中的一个目录,< strong > docker 只能访问 Dockerfile 所在目录下的文件 所以如果我有一个目录结构/root/dir 和 Dockerfile/root/dir/Dockerfile

我不能复制做以下事情

COPY root/src /opt/src

我也面临着同样的问题,我把我的 docker 文件移到了项目的根目录下

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

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

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

Docker 查找文件的方式来自工作目录 也就是说,如果你的命令是

拷贝 target/xyz.jar app.jar

ADD target/xyz.jar app.jar

Xyz jar 应该在 current/target 目录中——这里 current 是存放 docker 文件的位置。 所以如果你在另一个目录中有 Docker。它最好带到主项目目录,并有一个直接的路径到正在添加或复制到图像的 jar。

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

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

错误的 Dockerfile 命令

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

Working Dockerfile command

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

希望能帮到别人。

我必须使用以下命令来启动构建:

docker build .

我在一个.tgz 文件中遇到了同样的问题。

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

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

确保您构建图像的上下文设置正确。可以在构建参数时设置上下文。 例如: 其中“ . .”是本例中的上下文。

在我的例子中,我必须将所有项目文件放到一个子目录中

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


然后我用他的方式复制了文件

COPY app ./

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

I was solving the issue by removing .jar file and target folder from .gitignore file.

在我的例子中,解决方案是将文件放在一个目录和 用一个命令复制整个目录内容中,而不是复制单个文件:

COPY --chown=1016:1016 myfiles /home/myapp/myfiles

确保您的路径名称相同(区分大小写) ,文件夹名称 /dist/inventory

COPY /Dist/Inventory ... -- was throwing the error
COPY /dist/inventory ... -- working smoothly