当前位置: 首页 > news >正文

跨架构镜像打包问题及解决方案

问题背景:

  • 需求:
    • 有一个镜像是 docker.io 的,是 docker.io/aquasec/kube-bench:v0.10.6,我想把该镜像在本地电脑(可翻墙)下载下来,然后 docker save 打包成一个 tar 包,传输到服务器上。
  • 环境:
    • 本地电脑:MacOS 14.5 (ARM64)
    • Docker Desktop:4.41.2 (191736)
    • Docker Engine:28.1.1

问题现象

我的电脑是 arm64 架构,我考虑通过 docker pull --platform=linux/amd64 下来镜像,然后 docker save 成一个 tar 包,传输到服务器上,直接 docker load 使用,具体命令如下:

# 拉取 linux/amd64 架构镜像
docker pull --platform=linux/amd64 docker.io/aquasec/kube-bench:v0.10.6# 打包镜像为tar包
docker save -o kube-bench.tar docker.io/aquasec/kube-bench:v0.10.6

但是在执行 docker save 命令时,报错信息:
Error response from daemon: unable to create manifests file: NotFound: content digest sha256:b544d2a5cba58aa28c123fe2a535893f607d4f6b62a38db370c4dcc3a6a275e6: not found

根因分析:

详细原因参考:https://github.com/docker/cli/issues/5476

  1. Docker Desktop Bug:当宿主机与目标镜像架构不同时,docker save 错误地尝试访问宿主机架构(ARM64)的manifest数据。
  2. 预期行为:save 操作应仅打包已拉取的指定架构(AMD64)镜像数据,不应检查其他架构
  3. 补充验证:相同操作在Ubuntu AMD64主机上保存ARM64镜像可成功(反向场景正常)

补充:该问题属于是 docker desktop 的一个bug了,同样的操作,我在 ubuntu amd64 服务上,使用 docker save 一个 arm64 架构的镜像,可以正常 docker save 成功。

save 失败是因为 docker 在 save 时去找了 arm64 架构镜像的元数据(b544d2a5cba58aa28c123fe2a535893f607d4f6b62a38db370c4dcc3a6a275e6 就是 arm64 架构镜像的sha256),发现没找到,就报错了,正常情况不应该报错,因为 save 操作其实就是将镜像元数据和 layer 层打包就可以了。

解决方案:

docker save 时显式指定平台参数:

# 打包指定架构镜像为tar包
docker save -o kube-bench.tar --platform=linux/amd64 docker.io/aquasec/kube-bench:v0.10.6

可以正常 save 成功。

建议

  1. 完整性验证:传输后可在服务器执行 docker load -i kube-bench.tar && docker inspect --format=‘{{.Architecture}}’ <IMAGE_ID> 确认架构
  2. 替代方案:考虑使用 skopeo 工具(更适合跨架构镜像操作)
  3. 长期方案:关注Docker Desktop更新,该问题可能在未来版本修复

相关文章:

  • Odoo 打印功能架构与工作流程深度剖析
  • ADB推送文件到指定路径解析
  • 一键提取Office内图片的工具
  • 华为OD机试真题——字母组合过滤组合字符串(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 大型工业控制系统中私有云计算模式的弊端剖析与反思
  • react-color-palette源码解析
  • leetcode hot100刷题日记——28.环形链表2
  • idea本地git上传gitee码云失败分析,push rejected+git手动融合
  • 设计模式-发布订阅
  • 工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”
  • spark shuffle的分区支持动态调整,而hive不支持
  • Kubernetes面试题(基础向)
  • unity星空运动
  • Linux | Shell脚本的基础知识
  • ai如何绘制mg人物的睫毛
  • 求满足target的最小窗口的长度,滑动窗口法,双指针
  • 【Ubuntu远程桌面】
  • NanoGPT的BenchMarking.py
  • 2021年江西工业互联网大赛———恶意app分析
  • VL 中间语言核心技术架构:构建全链路开发生态
  • 用自己的计算机做服务器建网站/免费创建网站软件
  • 医院网站建设与管理ppt/免费推广渠道有哪些
  • 做现金贷网站的公司/百度热议排名软件
  • 网站被入侵后需做的检测(1)/网站优化排名提升
  • 义乌做网站公司/网络营销公司
  • 全站搜索/免费关键词挖掘网站