gpt4 book ai didi

docker - "Caching"中间 Docker 构建

转载 作者:行者123 更新时间:2023-12-02 09:56:13 25 4
gpt4 key购买 nike

我正在学习使用 Docker,但遇到了一个小烦恼。每当我对 Dockerfile 进行更改时,我都会运行 docker build -t tag . ,它会按预期遍历整个 Dockerfile。由于我项目中的依赖关系,这需要 5-6 分钟。有时我运行的命令会导致错误,或者 Dockerfile 中有错误。虽然修复可能需要几秒钟,但我必须重建整个系统,这降低了我的工作效率。有没有办法在编辑 Dockerfile 后“从上次构建失败的地方继续”?谢谢。

最佳答案

这称为“构建缓存”,它已经是 Docker 的一项功能。 Docker 的构建器只会使用缓存,直到 Dockerfile 发生更改为止。使用 COPY 或 ADD 指令时存在一些边缘情况,这将导致构建缓存无效(因为它会对文件进行哈希处理以确定是否有任何更改,如果发生更改则使缓存无效)。这意味着如果您使用 COPY foo /foo并且您更改了该文件,构建缓存将失效。另外,如果你这样做COPY . /opt/bar/ (意思是,您将整个目录复制到某个地方),即使是一些小的更改,例如 Vim 交换文件或 Dockerfile 更改也会使缓存无效!

根本不使用构建缓存的行为是使用 --no-cache 调用的。在你的docker build命令。

所以基本上,它就在那里,并且您正在使用它,只是您可能在很早的时候更改了 Dockerfile,或者使用 COPY/ADD 指令遇到了鲜为人知的边缘情况,并且构建器正在使所有内容无效在那之后。在提出问题之前先回答一下这个问题,在更改使缓存失效后,继续使用缓存将非常困难或不可能。这意味着,如果您更改第一个 Dockerfile 行并使构建缓存无效,则基本上不可能再使用该点之后的构建缓存。

关于docker - "Caching"中间 Docker 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37175559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com