You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将docker-dir格式镜像转为docker-archive?求哈希计算方法

解答:docker-dir转docker-archive的哈希计算与转换工具

一、哈希文件夹的计算规则

你看到的933bb35f5710a7515f24e7a4a8e8c6ca45a26a9c6590be5514e4af1f8dd56da1这类文件夹名称,是对应层元数据JSON内容的完整SHA256哈希值,具体计算步骤如下:

  1. 提取层信息:从docker-dir目录下的manifest.json中,获取各层的顺序、层哈希(如示例中的80098e3d304cd7858ad97b310cd16083fbe6fab2968be7a988fc6894cb85dc25),以及镜像的基础配置(如操作系统、架构、创建时间等)。
  2. 生成层元数据JSON:为每个层生成对应的元数据JSON,结构示例如下(基础层无parent字段,非基础层需指定父层的哈希文件夹名):
    {
      "id": "生成的SHA256哈希值",
      "created": "2024-05-20T18:21:53.000Z",
      "container_config": {
        "Cmd": ["/bin/sh", "-c", "#(nop) ", "CMD [\"/bin/bash\"]"],
        "Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],
        "Image": "sha256:xxxxxx",
        "Labels": {}
      },
      "os": "linux",
      "architecture": "amd64"
    }
    
  3. 计算哈希:将上述JSON内容压缩为无空格、无换行的单行字符串,然后计算其SHA256哈希值,这个值就是文件夹的名称,同时要填入JSON的id字段中。
  4. 生成文件夹内容:每个哈希文件夹下需要创建三个文件:
    • json:保存上述格式化后的元数据JSON
    • layer.tar:创建指向对应层tar文件的软链接(如../80098e3d...tar)
    • VERSION:文件内容固定为1.0

二、现成转换工具

不需要手动写脚本,直接用skopeo工具即可完成格式转换,步骤如下:

  1. 安装skopeo(多数Linux发行版可通过包管理器安装,如apt install skopeo或dnf install skopeo)
  2. 执行转换命令:
    skopeo copy dir:///绝对路径/ubuntu-docker-dir docker-archive:///绝对路径/ubuntu-docker-archive.tar.gz
    

如果没有skopeo,也可以通过Podman间接转换:

# 将docker-dir镜像导入本地容器存储
skopeo copy dir:///绝对路径/ubuntu-docker-dir containers-storage:localhost/ubuntu:temp
# 导出为docker-archive格式
podman save -o ubuntu-docker-archive.tar.gz --format docker-archive localhost/ubuntu:temp

内容的提问来源于stack exchange,提问作者John Stanford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:12:11