为什么我的Docker映像中的大文件每次都被推送,即使没有对它们进行更改?

我有一个Docker图像,我正在build造一个Dockerfile。

dockerfile包含一些COPY语句。 其中之一是一个大约120MB的大文件。

它的格式是COPY myfile / data /

当我做docker推到远程registry时,每次都需要很长时间。 尽pipe这个文件没有改变。 它似乎仍然上传略超过120MB。

我误解了algorithm如何工作,以确定文件是否已经改变或什么?

而docker构build如何处理通配符? 即

COPY localdir / * / remotedir /

这实际上是仅数据量。 但我不确定这是做这件事的最好方法。 数据只有卷被鼓励,但我几乎想上传文件到一个只运行sftp的数据卷,然后上传文件可能是一个更好的方法。 这是一个启动服务器,这些是Linux initrd和内核文件。 我没有太多,但是期望保留一些,并且会删除旧的。


更新:我想我可能已经发现了一个与Docker构build计算文件更改的方式有关的错误。 在这里看到我的github问题。

Docker文档指出:

在ADD和COPY指令的情况下,文件的内容被放入图像被检查。 具体来说,对文件进行校验和,然后在高速caching查找期间使用校验和。 如果文件(包括其元数据)中的任何内容发生更改,则caching将失效。

即使文件内容没有改变,文件元数据的改变也会导致caching失效。 所以我想,你的文件的权限或创build/更新date是在你的docker生成运行之间改变。