我正在学习使用码头,我遇到了一个小麻烦。每当我对Dockerfile进行更改时,我都会运行docker build -t tag .,它按应有的方式遍历整个Dockerfile。由于项目中的依赖关系,这需要5-6分钟的时间。有时,我运行的命令会导致错误,或者在Dockerfile中出现错误。虽然修复可能需要几秒钟,但我必须重建整个东西,这降低了我的生产力。在编辑Dockerfile之后,是否有一种方法可以“继续从构建上一次失败的地方继续”?谢谢。
发布于 2016-05-12 01:47:17
这被称为“构建缓存”,它已经是Docker的一个特性。Docker的构建器只使用缓存,直到Dockerfile发生更改为止。在使用COPY或ADD指令时,有一些边缘情况会导致构建缓存失效(因为它会散列文件以确定是否有任何更改,如果已经更改,则使缓存无效)。这意味着,如果您使用的是COPY foo /foo,并且您已经更改了该文件,则构建缓存将失效。另外,如果您执行COPY . /opt/bar/ (意思是将整个目录复制到某个位置),即使是一些小的更改,比如Vim交换文件或Dockerfile更改,也会使缓存失效!
在--no-cache命令中使用docker build调用不使用构建缓存的行为。
基本上,它就在那里,而且您正在使用它,只是您可能会在非常早的时候更改Dockerfile,或者使用一个COPY/ADD指令来触及不太为人所知的边缘情况,然后构建器就会使该点之后的所有内容失效。仅仅是在问之前回答这个问题,在更改使缓存失效之后,继续使用缓存是非常困难或不可能的。这意味着,如果您更改了第一个Dockerfile行并使构建缓存失效,那么基本上不可能在这一点之后使用构建缓存。
https://stackoverflow.com/questions/37175559
复制相似问题