首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算Docker buildx层缓存散列?

如何计算Docker buildx层缓存散列?
EN

Stack Overflow用户
提问于 2022-04-15 17:26:30
回答 1查看 622关注 0票数 1

我正在深入了解Docker的缓存,以尝试调试an issue。我正在试图找出如何,确切地说,buildx检查一个层是否在本地缓存中可用。虽然我已经搜索了相当多的内容,但我似乎找不到任何有关这方面的文档。

查看本地缓存文件本身,我看到一堆带有散列名称的文件。我的假设是,它的工作方式如下(假设使用type=local,mode=max):

对于Dockerfile中的每一行,它都使用一些参数组合来计算SHA哈希。directory.

  • If

  • --cache-from目录中检查是否存在以该哈希名称命名的文件是否存在

  • ,它是否使用该文件作为层,并且不重新构建任何内容(并将该文件复制到不存在的--cache-to

  • ,它构建该层并将其保存为文件,并将该哈希作为名称,在directory.

  • This中,--cache-to中的输出缓存为Dockerfile.

中的每一行提供一个文件。

所以我的问题是:

  1. ,我对这个过程的理解是正确的吗?我是否遗漏了上面任何关键的elements?
  2. For步骤(1),它用来计算哈希的“参数”是什么?我认为这是行本身的字符串值,加上行复制的任何文件的值(例如ADD),但是它还使用其他什么吗?例如,它复制的任何文件的最后修改时间戳?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-19 19:48:09

  1. ,我对这个过程的理解是正确的吗?我遗漏了什么关键元素吗?

我的理解大致就是这样。我需要亲自检查代码才能知道具体情况。

对于上面的步骤(1),用于计算哈希的“参数”是什么?我认为这是行本身的字符串值,加上行复制的任何文件的值(例如ADD),但是它还使用其他什么吗?例如,它复制的任何文件的最后修改时间戳?

通常,Dockerfile步骤的缓存使用以下方法(在buildkit之前):

  • 用于添加/复制步骤,这是源文件的散列。该哈希包括文件所有权和权限。快速测试表明修改时间戳不包括在其中(在我触摸被复制的文件之后仍然使用缓存)。对于运行步骤,
  • 包含任何ENV或ARG键/值对,因为它们会修改环境,以及正在运行的命令文本。Docker没有从外部资源提取命令的概念,它也不知道哪些环境变量的更改会影响任何特定的命令。对于所有步骤,
  • 要求前一步的结果加上当前的步骤匹配(新的COPY --link可能是这种情况的例外)。因此,如果您将一个新文件复制到映像中,那么在缓存中将不再找到生成阶段的所有剩余步骤,所以docker无法一般地知道某个特定文件不会影响某些运行步骤。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71887067

复制
相关文章

相似问题

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