我正在深入了解Docker的缓存,以尝试调试an issue。我正在试图找出如何,确切地说,buildx检查一个层是否在本地缓存中可用。虽然我已经搜索了相当多的内容,但我似乎找不到任何有关这方面的文档。
查看本地缓存文件本身,我看到一堆带有散列名称的文件。我的假设是,它的工作方式如下(假设使用type=local,mode=max):
对于Dockerfile中的每一行,它都使用一些参数组合来计算SHA哈希。directory.
--cache-from目录中检查是否存在以该哈希名称命名的文件是否存在
--cache-to
--cache-to中的输出缓存为Dockerfile.中的每一行提供一个文件。
所以我的问题是:
ADD),但是它还使用其他什么吗?例如,它复制的任何文件的最后修改时间戳?发布于 2022-04-19 19:48:09
我的理解大致就是这样。我需要亲自检查代码才能知道具体情况。
对于上面的步骤(1),用于计算哈希的“参数”是什么?我认为这是行本身的字符串值,加上行复制的任何文件的值(例如ADD),但是它还使用其他什么吗?例如,它复制的任何文件的最后修改时间戳?
通常,Dockerfile步骤的缓存使用以下方法(在buildkit之前):
COPY --link可能是这种情况的例外)。因此,如果您将一个新文件复制到映像中,那么在缓存中将不再找到生成阶段的所有剩余步骤,所以docker无法一般地知道某个特定文件不会影响某些运行步骤。https://stackoverflow.com/questions/71887067
复制相似问题