描述
我有一个 Dockerfile,其中包含以下内容:
复制 MyAgSourceAPI/conf/php/testsql.php /var/www/
但这会导致错误:
复制失败:stat /var/lib/docker/tmp/docker-builder918577595/MyAgSourceAPI/conf/php/testsql.php:没有这样的文件或目录
重现问题的步骤:
描述您收到的结果:
复制失败: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、物理等):
文件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
请帮忙
最有用的评论
检查 .dockerignore
您可能试图复制 .dockerignore 中的文件。