首页 > 解决方案 > 如何在本地计算 docker 映像的确定性和可重现校验和,而无需 ping 任何注册表?

问题描述

如何在本地计算 docker 映像的确定性和可重现校验和,而无需 ping 任何注册表?

校验和不应取决于映像名称或它所在的注册表。它应该完全取决于所有层的内容。

例如,假设如下:

docker build . --no-cache然后多次构建图像​​应该总是产生相同的校验和。

常规图像 ID 并没有削减它,因为它以某种方式使用来自中间容器的内容,因此总是会发生变化。我也知道,从 Docker 1.10 开始,图像有一个“RepoDigest”属性,它根据图层的内容唯一地标识图像。但是,据我所知,只有在拉取或推送到注册表时才会计算该摘要。有没有办法在不联系注册表的情况下获取此字段?(无论图像名称、标签或存储库如何,它实际上是确定性的吗?)

基本上,我正在寻找一种在 docker image 上运行良好 ol' sha256sum 的方法。这将帮助我实现类似于使用 Bazel 可以完成的事情:一个封闭的构建环境,从而实现:

标签: dockerchecksumdocker-build

解决方案


推荐阅读