我有一个关于.dockerignore工作流的问题,在浏览文档和不同的互联网主题时,我无法真正理解这个问题。
具有以下文件夹结构:
home
|
|- folder_1
|- folder_2在我的dockerfile中,我想复制home目录的内容,所以我使用
COPY ./ /home在.dockerignore中有:
*
!folder_1
!folder_3我指的是一个不存在的文件夹-- folder_3,它应该被复制,对吗?我运行了它,看起来这是没有问题的,因此.dockerignore在某种程度上管理了这种情况。
如果我试图在没有使用.dockerignore,的情况下做同样的事情,针对一个不存在的目录,我将得到一个错误。
如果有人可以清除这个工作流,或者复制,请附上一些信息,以便我可以教育自己。
提前感谢!
发布于 2021-06-30 07:20:16
首先,.dockerignore的工作方式类似于.gitignore。在这些文件中,您根据应该添加的文件和不应该添加的文件设置规则。
在您的场景中,您可以COPY整个主目录,该目录由、folder_1、和folder_2组成。.dockerignore文件设置以下规则:
* # ignore all files/directories
!folder_1 # do not ignore folder_1
!folder_3 # do not ignore folder_3无论您的本地folder_1 home目录中是否存在一个或folder_3,它都不会显示任何错误,因为它只是试图查找.dockerignore中的特定文件/目录。如果它找到了这个文件/目录,就会应用这些规则。如果它找不到这个文件/目录,它就不会对它做任何事情。
希望你现在说的更清楚了。
发布于 2021-06-30 10:04:54
您偶尔会看到对Docker构建上下文的引用。构建有两个步骤:
docker build客户端应用程序创建其目录参数的tar文件,并在HTTP请求中将其发送给Docker守护进程。Docker守护进程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内部路径的错误消息。
https://stackoverflow.com/questions/68189234
复制相似问题