繁体   English   中英

cp:无法统计“Pipfile”:Docker 构建中没有这样的文件或目录

[英]cp: cannot stat 'Pipfile': No such file or directory in Docker build

我有一个这样的项目目录设置:

docker 和 Backend 是兄弟姐妹

我将 go 放入我的 docker 文件夹并输入docker build./

理论上,基于我的Dockerfile的相关部分,我应该go到父目录并进入Backend

ARG PROJECT_DIR=../Backend
WORKDIR $PROJECT_DIR
RUN cp Pipfile Pipfile.lock

但是我得到了错误:

cp: cannot stat 'Pipfile': No such file or directory

我也尝试过 COPY ,它也不起作用。

为什么我不能将我的 Pipfile 复制到 Pipfile.lock? 它存在于后端目录中。

Docker 是一个客户端 ( docker ) <> 服务器 ( dockerd ,作为守护进程运行) 应用程序。 当您键入docker build...时,客户端会压缩上下文(在您的示例中指定为./ )并将其发送到服务器(在大多数情况下,它在同一台机器上运行,但这在这里真的无关紧要)。 这意味着构建过程(由服务器完成)无法使用不在上下文中的任何内容。

所以现在你可以看到为什么“兄弟”目录中的东西不可用,它们不是上下文的一部分,也没有发送到构建的守护进程。

在此处参考更多信息: https://docs.docker.com/engine/reference/commandline/build/#extended-description

你需要明白两件事:

  1. docker 构建实际上使用基础映像 ( FROM ) 实例化一个容器,执行 Dockerfile 上指定的更改,并从此容器的最终Dockerfile创建一个新映像。
  2. docker 容器具有独立的文件系统。 除非您配置卷,否则您无法从中访问外部文件(并且卷在 Dockerfile/docker 构建过程中不可用

因此,要将文件放入 docker 映像中,请使用 COPY 命令。 第一个参数是原始文件路径,来自 Dockerfile 的目录。 出于安全原因,无法访问外部文件。

如果你需要访问 Dockerfile 目录之外的文件,你可能把它放错了地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM