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

时间:2015-04-15 22:54:03

标签: docker

我有一个Docker镜像,我用Dockerfile构建。

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

以COPY myfile / data /

的形式编写

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

我是否误解了算法如何确定文件是否已发生变化?

docker如何构建处理通配符?即。

COPY localdir / * / remotedir /

这实际上是一个仅限数据的卷。但我不确定这是最好的方法。鼓励使用仅限数据的卷,但我几乎认为将文件上传到运行sftp的仅数据卷,然后上传文件可能是更好的方法。它是一个启动服务器,这些是Linux initrd&内核文件。我不会有很多,但希望保留一些,并将删除旧的。


更新: 我想我可能已经发现了与docker build计算文件更改的方式相关的错误。请参阅我的github问题here

1 个答案:

答案 0 :(得分:3)

docker documentation州:

  

在ADD和COPY指令的情况下,内容   检查放入图像的文件。具体来说,一个   校验和完成文件,然后在期间使用校验和   缓存查找。如果文件中有任何更改,包括   它的元数据,然后缓存无效。

即使文件内容没有改变,文件元数据的更改也会导致缓存失效。所以我猜你的文件的权限或创建/更新日期在docker build build之间都在变化。