You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何从已保存的Docker镜像tar文件获取匹配Docker预期的镜像摘要(SHA256校验和)

如何从已保存的Docker镜像tar文件获取匹配Docker预期的镜像摘要(SHA256校验和)

我之前也踩过这个坑!直接用sha256sum算tar包的哈希肯定和Docker显示的对不上,因为这俩根本不是一回事儿。Docker的镜像摘要本质是镜像核心配置文件的SHA256哈希,不是整个tar压缩包的哈希。下面给你一步步说怎么从tar文件里拿到正确的摘要:

核心原理

docker save导出的tar包里包含了镜像的所有分层文件、元数据(比如manifest.json),还有一个关键的镜像配置文件(文件名是sha256:xxx.json格式)。Docker显示的镜像摘要,就是这个配置文件内容的SHA256哈希,再加上sha256:前缀。

具体操作方法

方法一:快速无解压(推荐)

不用把整个tar包解压出来,直接通过命令提取关键内容计算:

  1. 先从tar包里提取manifest.json,找到对应镜像的配置文件名:
    # 用jq解析json(需要先安装jq,大部分Linux发行版可以用包管理器装)
    CONFIG_FILE=$(tar -xf /tmp/my-image.tar -O manifest.json | jq -r '.[0].Config')
    
    要是你没装jq,也可以用grep+awk替代:
    CONFIG_FILE=$(tar -xf /tmp/my-image.tar -O manifest.json | grep -o '"Config": "[^"]*"' | cut -d'"' -f4)
    
  2. 直接从tar包里提取这个配置文件,计算它的SHA256哈希:
    tar -xf /tmp/my-image.tar -O "$CONFIG_FILE" | sha256sum
    
  3. 把输出的哈希值前面加上sha256:,就是Docker通过docker images --digests显示的那个摘要了。

方法二:解压后手动操作

要是你更喜欢可视化操作,也可以先解压整个tar包:

  1. 解压tar文件到当前目录:
    tar -xf /tmp/my-image.tar
    
  2. 打开解压出来的manifest.json文件,找到你要的镜像条目,查看"Config"字段对应的文件名(比如sha256:019cf20c5b98efcd548952d31df1768377916bf8d57d70d979c6c92bfd5e7446.json
  3. 计算这个配置文件的SHA256哈希:
    sha256sum sha256:019cf20c5b98efcd548952d31df1768377916bf8d57d70d979c6c92bfd5e7446.json
    
  4. 同样,给哈希值加上sha256:前缀,就得到了匹配Docker的镜像摘要。

注意事项

  • 要是你的tar包是多平台镜像或者包含多个标签的镜像,manifest.json里会有多个数组元素,这时候要根据"RepoTags"字段找到你对应的镜像条目,再取它的Config字段,不要直接用.[0]
  • 确保计算哈希时,是读取配置文件的原始内容,不要给文件加任何额外的换行或修改,否则哈希会不匹配。

火山引擎 最新活动