首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.dockerignore工作流不清

.dockerignore工作流不清
EN

Stack Overflow用户
提问于 2021-06-30 06:07:34
回答 2查看 569关注 0票数 0

我有一个关于.dockerignore工作流的问题,在浏览文档和不同的互联网主题时,我无法真正理解这个问题。

具有以下文件夹结构:

代码语言:javascript
复制
home
   |
   |- folder_1
   |- folder_2

在我的dockerfile中,我想复制home目录的内容,所以我使用

代码语言:javascript
复制
COPY ./ /home

.dockerignore中有:

代码语言:javascript
复制
*
!folder_1
!folder_3

我指的是一个不存在的文件夹-- folder_3,它应该被复制,对吗?我运行了它,看起来这是没有问题的,因此.dockerignore在某种程度上管理了这种情况。

如果我试图在没有使用.dockerignore,的情况下做同样的事情,针对一个不存在的目录,我将得到一个错误。

如果有人可以清除这个工作流,或者复制,请附上一些信息,以便我可以教育自己。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-30 07:20:16

首先,.dockerignore的工作方式类似于.gitignore。在这些文件中,您根据应该添加的文件和不应该添加的文件设置规则。

在您的场景中,您可以COPY整个目录,该目录由、folder_1、folder_2组成。.dockerignore文件设置以下规则:

代码语言:javascript
复制
*           # ignore all files/directories
!folder_1   # do not ignore folder_1
!folder_3   # do not ignore folder_3

无论您的本地folder_1 home目录中是否存在一个folder_3,它都不会显示任何错误,因为它只是试图查找.dockerignore中的特定文件/目录。如果它找到了这个文件/目录,就会应用这些规则。如果它找不到这个文件/目录,它就不会对它做任何事情。

希望你现在说的更清楚了。

票数 1
EN

Stack Overflow用户

发布于 2021-06-30 10:04:54

您偶尔会看到对Docker构建上下文的引用。构建有两个步骤:

  1. docker build客户端应用程序创建其目录参数的tar文件,并在HTTP请求中将其发送给Docker守护进程。Docker守护进程
  2. 解压tar文件,在其中查找Dockerfile,并使用给定的文件内容运行Dockerfile

.dockerignore只影响第一步:它阻止docker build发送特定的Docker守护进程文件。.dockerignore文件不需要有一个folder_3目录,它只是说如果有一个目录,它就不应该被排除。daemon端的第二步根本不使用.dockerignore,当您使用COPY . /somewhere时,它会复制整个构建上下文;也就是说,不管在COPY . /somewhere请求中发送什么。

这个工作流有几个实际的结果。如果您有一个非常大的本地目录,则可能需要时间将其发送到Docker守护进程,并且Docker守护进程在构建过程中保留它的副本,因此通常值得.dockerignore您的.git目录和构建树。这个设置也是docker build如何在不同的系统或VM中与Docker守护进程一起工作的,这也是为什么如果您试图以不存在的名称(COPY folder_3 somewhere)命名文件时,会得到引用Docker内部路径的错误消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68189234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档