无法为 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 映像