Moby: 复制失败:stat /var/lib/docker/tmp/docker-builder918577595/...

创建于 2017-09-26  ·  36评论  ·  资料来源: moby/moby

描述

我有一个 Dockerfile,其中包含以下内容:

复制 MyAgSourceAPI/conf/php/testsql.php /var/www/

但这会导致错误:

复制失败:stat /var/lib/docker/tmp/docker-builder918577595/MyAgSourceAPI/conf/php/testsql.php:没有这样的文件或目录

重现问题的步骤:

  1. 创建一个 Dockerfile
  2. docker build -t rkevinburton/myagsourceapi 。

描述您收到的结果:

复制失败:stat /var/lib/docker/tmp/docker-builder918577595/MyAgSourceAPI/conf/php/testsql.php:没有这样的文件或目录

描述您预期的结果:

我希望该文件被复制。

您认为重要的其他信息(例如问题仅偶尔发生):
在此之前我有两行:

复制 MyAgsourceAPI/conf/apache/conf.d/myagsource.conf /etc/apache2/conf.d/myagsource.conf
复制 MyAgsourceAPI/conf/apache/sites-available/default.conf /etc/apache2/sites-available/default.conf

他们复制一个文件并且都运行没有错误。

这似乎与 for-mac 和 for-linux 存储库上提出的问题相似,但解决方案(正确的 .dockerignore)似乎不适用,因为该文件不存在。

docker version的输出:

PS C:\Users\rburton\code> docker version
Client:
 Version:      17.06.2-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   cec0b72
 Built:        Tue Sep  5 19:57:19 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.06.2-ce
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   cec0b72
 Built:        Tue Sep  5 19:59:19 2017
 OS/Arch:      linux/amd64
 Experimental: true

docker info的输出:

PS C:\Users\rburton\code> docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 5
Server Version: 17.06.2-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 6e23458c129b551d5c9871e5174f6b1b7f6d1170
runc version: 810190ceaa507aa2727d7ae6f4790c76ec150bd2
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.41-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.934GiB
Name: moby
ID: 4ZGZ:VUUY:PSMN:56QB:GSTL:FAYH:J326:YZW3:ZQ5U:63UZ:TIIT:QSTR
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 16
 Goroutines: 26
 System Time: 2017-09-26T13:26:23.281243Z
 EventsListeners: 0
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

其他环境详细信息(AWS、VirtualBox、物理等):

arebuilder statumore-info-needed versio17.06

最有用的评论

检查 .dockerignore

您可能试图复制 .dockerignore 中的文件。

所有36条评论

文件MyAgSourceAPI/conf/php/testsql.php是否存在于您开始构建的路径中? 如果您认为这是一个错误,您能否提供重现的确切步骤? 请记住,我们无权访问您的构建环境,因此无法重现您迄今为止编写的步骤(即,我们无权访问您的 Dockerfile 或您在 Dockerfile 中使用的文件。

我也遇到了这个。 我有所有要复制到/var/lib/docker/[storage directory]的文件,并且正在从该目录中运行docker build命令。

我在 $ /var/lib/docker/[storage directory]中有一个config.json文件,我得到了这个输出:

Step 20/27 : COPY /config.json /.berkshelf/config.json STDERR: COPY failed: stat /var/lib/docker/tmp/docker-builder836544169/config.json: no such file or directory ---- End output of docker build --file ./Dockerfile.jenkins --tag docnetwork-scruffy-ci . ----

看起来 Docker 正在您正在构建的目录之上创建一个新的/tmp/docker-builderxxxxxxx..../目录,然后无法引用我希望复制的文件。

我似乎得出的结论是,此错误不仅发生在源文件丢失时,而且还发生在目标路径上的权限不允许访问时。 这符合你的经验吗?

我目前正在执行所有操作root 。 即使在安装 Docker 后在我的用户上运行sudo usermod -aG docker my_user之后,我仍然收到错误消息。

Step 19/27 : RUN mkdir /.ssh && mkdir /.aws && mkdir /.berkshelf
        ---> Running in 05240f357302
        ---> 2491c79e79c6
       Removing intermediate container 05240f357302
Step 20/27 : COPY ./config.json /.berkshelf/config.json
       STDERR: COPY failed: stat /var/lib/docker/tmp/docker-builder124447013/config.json: no such file or directory

如果我之前没有列出:

vagrant@default-ubuntu-1604:~$ docker -v
Docker version 17.09.0-ce, build afdb6d4

vagrant@default-ubuntu-1604:~$ uname -a
Linux default-ubuntu-1604 4.4.0-75-generic #96-Ubuntu SMP Thu Apr 20 09:56:33 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

我也遇到了这个。 我有所有要复制到/var/lib/docker/[storage directory]的文件,并且正在从该目录中运行 docker build 命令。
我在/var/lib/docker/[storage directory]中有一个 config.json 文件,我得到了这个输出:

我会非常谨慎地使用/var/lib/docker中的任何目录作为构建上下文; 该目录包含由守护进程管理的所有状态/容器/图像/卷,对这些文件进行更改可能会导致奇怪的行为(某些目录也可能在启动容器时被挂载/卸载。

您能否提供最小的复制步骤,而不取决于您的环境或自定义(私有)图像,例如

mkdir foo && cd foo
echo '{"hello":"world"}' > config.json

docker build -t testing . -f -<<EOF
FROM alpine
COPY ./config.json /.berkshelf/config.json
EOF

同样的问题。 最有趣的时刻——在几次迭代之前一切都很好。 看起来它在COPY . /some_internal_path [这是此容器开发过程中的最后一次成功尝试] 之后被破坏了(通过 docker-compose 构建并更改了上下文)

坦率地说,我不知道如何重现它。 它现在坏了,我根本找不到解决方案让它恢复工作。

> Docker version 17.09.0-ce, build afdb6d4
> Linux * 4.10.0-35-generic #39-Ubuntu SMP Wed Sep 13 07:46:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

MyAgSourceAPI/conf/php/testsql.php 是否存在于您当前的目录中?
所有资源都必须存在于 docker build PATH 中,见下文:

Usage: docker build [OPTIONS] PATH | URL | -

当我尝试从不同的目录运行 docker 文件时,这发生在我身上。

我有COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory并通过指定 docker 文件设法解决了这个问题。

运行docker build . -f docker/development/Dockerfile有效。

但是运行Running docker build docker/development/Dockerfile` 导致了这个问题。

-f--file指定Dockerfile的名称和位置。

起初它觉得很奇怪,因为当我在应用程序根目录中有Dockerfile时它工作正常。 如果您想更好地管理环境 docker 文件,这将有所帮助。

运行docker build docker/development/Dockerfile将使用docker/development/Dockerfile作为其构建上下文; 从 Dockerfile 引用的任何文件都需要在该路径内。 而docker build . -f docker/development/Dockerfile使用. (第一个参数)作为构建上下文,并从docker/development/Dockerfile加载 Dockerfile,就好像它位于构建上下文的根目录( . )

我在 Windows 上有类似的问题。

COPY failed: stat /var/lib/docker/tmp/docker-builder746346263/xyz.properties

使用 -f 选项没有帮助。 我通过将相对路径以及 docker 文件的限定路径作为-f D:\path\todocker\fileDockerfile来尝试与 Dockerfile 相同的目录

完美地为我工作。
我遇到了这个问题,我无法将 zeppelin [1GB] 目录复制到 docker conatiner。 并得到问题“复制失败:stat /var/lib/docker/tmp/docker-builder977188321/zeppelin-0.7.2-bin-all:没有这样的文件或目录”

I am using docker Version: 17.09.0-ce and resolved issue by following steps.
Step 1: copy zeppelin directory [which i want to copy into docker package]into directory contain "Dockfile" 
Step 2: edit Dockfile and add command [location where we want to copy]
ADD ./zeppelin-0.7.2-bin-all /usr/local/  
Step 3: go to directory which contain DockFile and run command [alternatives also available]
docker build .

Step 4:  docker image created Successfully with logs
Step 5/9 : ADD ./zeppelin-0.7.2-bin-all /usr/local/
 ---> 3691c902d9fe
Step 6/9 : WORKDIR $ZEPPELIN_HOME
 ---> 3adacfb024d8 ....
Successfully built b67b9ea09f02

我在 CentOS 7 上遇到了同样的问题。它似乎与文件名或文件名长度有关。

我的文件名有问题:node-v6.11.0-linux-x64.tar.xz
它使用文件名:node.tar.xz

这是同一个文件,我只是重命名了它。

这可能有助于找到错误。

检查 .dockerignore

您可能试图复制 .dockerignore 中的文件。

我在 linux 中遇到了同样的问题,但它对我指定 COPY ./filename /usr/local....

COPY 只能复制它的子文件夹。

我的错误是认为如果我明确复制单个文件,.dockerignore 将不会用于过滤该指令。 不是这样。 您无法复制包含一百万个文件的目录中的单个文件,否则您想忽略这些文件。 .dockerignore 适用于每个 COPY 命令。

感谢指出上下文问题@AshtonHylton-awin 和@ thaJeztah——这就是我的答案。 对于那些使用docker-compose.yml的人来说,这种类型的块将执行与上面引用的docker build命令等效的操作:

        build:
            context: .
            dockerfile: ./postgres/Dockerfile

始终检查 .dockerignore。 我从第三方获得了一个项目,其中包含“*”。 难怪我不能从上下文中复制任何东西。 感谢@comm1x指出。

通读这个问题,我认为这里没有错误,所以我会继续并关闭。

如果您在阅读此问题后_do_ 认为仍然存在错误,请打开一张新票,其中包含重现的确切步骤。

@frostyandy2k的回答解决了这个问题

检查 .dockerignore

您可能试图复制 .dockerignore 中的文件。

这解决了我的问题! 我在 .dockerignore 中有docker文件夹,但是应该将这个文件夹中的一些文件复制到最终图像中。 谢谢你的建议!

我有同样的问题,我尝试发出薮猫的方式,但它仍然存在

我注意到了这一点:
我将当前目录移动到/work_dir,并将目录更改为/work_dir。 然后我可以成功地从 ./data/example/file.txt 复制。 但是我无法使用绝对路径来做到这一点,比如 cp /work_dir/data/example/file.txt。

dockerignore是解决方法! 谢谢

检查 .dockerignore

您可能试图复制 .dockerignore 中的文件。

谢谢 comm1x! 这解决了我的问题!

就我而言,这是 COPY 指令中缺少的昏迷:

COPY ["Dockerfile", "main.py", "requirements.txt", "src" "/app/"]

"src"之后添加逗号解决了问题:

COPY ["Dockerfile", "main.py", "requirements.txt", "src", "/app/"]

我设法通过排除文件夹指令来解决这个问题,因为我只是试图在我能够使用的工作目录中复制一个文件夹(.)和 url 路径,即

我只是在尝试COPY /etc/group /tmp/group并遇到此问题

我的网很慢,所以我想将我的本地作曲家复制到 php 容器中。
作曲家:/var/www/docker/script/composer
dockerfile /var/www/docker/php/Dockerfile
运行 ../../script/composer /usr/local/bin/

复制失败:构建上下文之外的禁止路径:../../../script/composer
我在 Dockerfile 中更改代码
WORKDIR /var/www/docker/script
复制作曲家 /usr/local/bin
没关系。

所以它是构建上下文概率?

dockerignore是解决方法! 谢谢

谢谢你的评论。 我已经挣扎了3个小时,这让我想到,也许......

如果有帮助,在我的情况下,它试图执行 COPY 操作,就好像上下文是 Dockerfile 一样,但上下文需要是 docker-compose 上一层:
鉴于此目录结构

│   docker-compose.yml
│
└───src
    │   Dockerfile
    │
    └───publish
            my.app.dll

如果我只是从 Dockerfile 构建,我会:

FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim
WORKDIR /app
COPY publish/ .
ENTRYPOINT [ "dotnet", "my.app.dll" ]

但是当从 docker-compose 构建时,它将构建上下文设置为“。” 和 dockerfile 作为 src/Dockerfile
那么 Dockerfile 必须反映 docker-compose 上下文

FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim
WORKDIR /app
COPY src/publish/ .
ENTRYPOINT [ "dotnet", "my.app.dll" ]

当我构建我的 docker 文件时,虽然我的项目中有目标文件夹,但我得到了这个错误
可以帮忙吗
'''''''''''''''''''''''''''''''''''''''''''''
将构建上下文发送到 Docker 守护进程 84.99kB
步骤 1/7:来自 openjdk:8-jdk-alpine
---> a3562aa0b991
步骤 2/7:音量 /tmp
---> 使用缓存
---> c8ca5e3ac388
步骤 3/7:ARG DEPENDENCY=target/dependency
---> 使用缓存
---> 1a1a2a4a5db1
步骤 4/7:复制 ${DEPENDENCY}/BOOT-INF/lib /app/lib
复制失败:stat /var/lib/docker/tmp/docker-builder997333669/target/dependency/BOOT-INF/lib:没有这样的文件或目录

@ahmedbokhari7如果您在撰写文件中设置context: ,两者都应该工作; 见https://docs.docker.com/compose/compose-file/#context

在您的情况下,上下文可能应该设置为context: ./src/

就我而言,这是文件名中的错字

我遇到了这个问题,但我根据@thaJeztah 的评论解决了这个问题。 请注意,路径从您开始构建的位置开始,而不是从您的 Dockerfile 所在的位置开始。 因此,在 Dockerfile 中编写路径并使用 COPY 或 ADD 时,您需要牢记这一点。

我试图使用“docker build -t reimage17”创建 docker 映像。 命令。 将“oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm”文件从 basicinstaclient 文件夹复制到基本文件夹时出现如下错误。
步骤 7/9:添加 ./basicinstaclient/oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm /basic/
添加失败:stat /var/lib/docker/tmp/docker-builder925234299/basicinstaclient/oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm:没有这样的文件或目录。

我正在从我的 Windows 机器中存在 docker 文件的文件夹执行构建命令。 下面是我的码头文件。

FROM ibmcom/websphere- liberty:latest
用户根

添加 ./rtcc.ear /opt/ibm/wlp/usr/servers/defaultServer/apps
添加 ./rtccClient.war /opt/ibm/wlp/usr/servers/defaultServer/apps
运行 yum -y 安装 libaio

运行 mkdir -pv /基本
复制 ./basicinstaclient/oracle-instantclient19.8-basic-19.8.0.0.0-1.x86_64.rpm /basic/
运行 rpm -i /basic/oracle-instantclient19.8-basic-19.8.0.0.0-1.x86_64.rpm

暴露 9088
请帮忙

此页面是否有帮助?
0 / 5 - 0 等级