首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“缓存”中间码头构建

“缓存”中间码头构建
EN

Stack Overflow用户
提问于 2016-05-12 00:54:32
回答 2查看 123关注 0票数 3

我正在学习使用码头,我遇到了一个小麻烦。每当我对Dockerfile进行更改时,我都会运行docker build -t tag .,它按应有的方式遍历整个Dockerfile。由于项目中的依赖关系,这需要5-6分钟的时间。有时,我运行的命令会导致错误,或者在Dockerfile中出现错误。虽然修复可能需要几秒钟,但我必须重建整个东西,这降低了我的生产力。在编辑Dockerfile之后,是否有一种方法可以“继续从构建上一次失败的地方继续”?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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行并使构建缓存失效,那么基本上不可能在这一点之后使用构建缓存。

票数 3
EN

Stack Overflow用户

发布于 2016-05-12 07:15:25

在编辑Dockerfile之后,是否有一种方法可以“继续从构建上一次失败的地方继续”?

没有(正如L0j1kanswer解释得很好)

这就是为什么最佳实践是将您的Dockerfile从最稳定的命令(永远不需要更改/修改的命令)组织到最具体的命令(您可能需要更改相当多的命令)。

这样,您的修改只会触发Dockerfile最后几行的构建,而不是再次遍历所有内容,因为您更改了第一行。

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

https://stackoverflow.com/questions/37175559

复制
相关文章

相似问题

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