我正在学习使用Docker而且我遇到了一个小烦恼。每当我对Dockerfile进行更改时,我都会运行docker build -t tag .
,它会遍历整个Dockerfile。由于我的项目中的依赖项,这需要5-6分钟。有时我运行的命令会导致错误,或者Dockerfile中会出错。虽然修复可能需要几秒钟,但我必须重建整个事情,这会降低我的工作效率。编辑Dockerfile后,有没有办法“从构建上次失败的地方继续”?感谢。
答案 0 :(得分:3)
这称为“构建缓存”,它已经是Docker的一项功能。 Docker的构建器将只使用缓存,直到Dockerfile发生更改。使用COPY或ADD指令时会出现一些边缘情况,这些指令会导致构建缓存失效(因为它会散列文件以确定是否有任何更改,如果是,则使缓存无效)。这意味着如果您使用COPY foo /foo
并且您已更改该文件,则构建缓存将失效。此外,如果你执行COPY . /opt/bar/
(意思是,将整个目录复制到某个地方),甚至像Vim交换文件或Dockerfile更改这样的小改动都会使缓存无效!
在--no-cache
命令中使用docker build
调用完全不使用构建缓存的行为。
所以基本上,它就在那里,并且你正在使用它,只是你可能在很早的时候改变了Dockerfile,或者用COPY / ADD指令击中那个鲜为人知的边缘情况,而构建器使一切都无效在那之后。只是在你问它之前回答这个问题,在更改使缓存失效后继续使用缓存是非常困难或不可能的。这意味着,如果您更改了第一个Dockerfile行并使构建缓存无效,则基本上不可能在该点之后使用构建缓存。
答案 1 :(得分:2)