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

时间:2019-10-20 22:42:49

标签: docker

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

docker和Backend是兄弟姐妹

我进入docker文件夹并输入docker build ./

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

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?它存在于后端目录中。

2 个答案:

答案 0 :(得分:0)

Docker是客户端(docker)<>服务器(dockerd,作为守护程序运行)应用程序。当您键入docker build...时,客户端将压缩上下文(在您的示例中指定为./)并将其发送到服务器(在大多数情况下,该服务器在同一台计算机上运行,​​但这实际上无关紧要)。这意味着上下文中不是的所有内容对于构建过程都是不可用的(由服务器完成)。

因此,现在您可以看到为什么“兄弟”目录中的内容不可用,它们不是上下文的一部分,也没有发送到守护程序进行构建的原因。

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

答案 1 :(得分:0)

您需要了解以下两点:

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

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

如果您需要访问Dockerfile目录之外的文件,则可能将其放置在错误的位置。