个人电脑上拉取指定版本的镜像为什么打包不了?

答案内容由AI生成,仅供参考:

:white_check_mark: 总结

问题 原因 解决方法
docker pull 成功,但 docker save 失败 多平台 manifest 引发的元数据不一致或缺失 使用镜像 ID 保存、确认标签准确性、升级 Docker、使用专用架构标签

:wrench: 推荐操作顺序:

  1. docker images
  2. docker inspect <image-name>
  3. 使用镜像 ID 执行 docker save
  4. 如仍失败,换到 Linux 环境(尤其 ARM64)操作
点击此处查看详细分析解答

Docker 镜像拉取与打包问题分析

根据您提供的信息,您已成功拉取指定版本的 Docker 镜像,但在尝试使用 docker save 打包时遇到了错误:

Error response from daemon: unable to create manifests file: NotFound: content digest sha256:93a1854c8e188605d13c868f4d79ac84ab2816b972a313f2b3370a902dfb46c: not found

下面对问题进行详细解析和解决方案说明。


:magnifying_glass_tilted_left: 问题根源分析

虽然 docker pull 操作显示成功下载了镜像:

Status: Downloaded newer image for swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2:2.7.2

但后续 docker save 失败,提示某个内容摘要(digest)未找到,最常见的原因是:镜像使用了多平台支持的“镜像清单列表(manifest list)”机制,而 Docker 客户端在拉取和保存时存在兼容性或实现层面的问题

1. 多架构镜像与 manifest 列表

当您使用 --platform linux/arm64/v8 参数拉取镜像时,Docker 会请求特定架构的镜像。很多公共或企业镜像仓库(如 SWR 华为云容器镜像服务)将同一个标签(tag)指向一个包含多个架构(如 x86_64、ARM64)的镜像清单列表(manifest list)

  • docker pull 会根据 --platform 选择正确的子镜像并拉取。
  • docker save 在处理这种通过 manifest 重定向拉取的镜像时,有时无法正确追踪其完整的元数据或图层关联,从而导致保存失败。

2. docker save 对 manifest-list 支持有限

Docker 的 save 命令主要用于保存本地镜像为 tar 包,它依赖于本地镜像完整且能解析所有层和 manifest 信息。如果镜像来自一个远端 manifest 列表,并且本地没有完整构建或引用清晰的内容地址(content address),则可能出现:

  • 无法定位某一层的 digest
  • manifest 中的部分内容在本地缺失

这就是报错中 content digest ... not found 的核心原因。


:white_check_mark: 解决方案

:check_mark: 方案一:确认本地镜像是否存在且完整

运行以下命令查看本地是否存在该镜像:

docker images | grep mindspore-ascend-a2

或更精确地:

docker inspect swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2:2.7.2

:backhand_index_pointing_right: 如果能正常输出信息,说明镜像是存在的;否则需重新拉取。


:check_mark: 方案二:使用镜像 ID 替代名称进行保存

有时镜像名称带路径会导致识别问题。可以尝试用镜像 ID 来保存:

# 获取镜像 ID
docker images --format "{{.ID}}\t{{.Repository}}:{{.Tag}}" | grep mindspore-ascend-a2

# 假设得到镜像 ID 为 123abc
docker save -o D:\docker\mindspore-ascend-a2_2.7.2.tar 123abc

这避免了因镜像命名解析失败导致的问题。


:check_mark: 方案三:禁用 manifest 转换行为(实验性)

某些情况下,可尝试 直接拉取特定架构的独立镜像,而不是通过 manifest 列表间接获取。

确保您拉取的是真实存在的单个镜像 tag。例如,若知道 ARM64 架构的专属 tag 是 2.7.2-arm64,可以直接拉取:

docker pull swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2:2.7.2-arm64
docker save -o D:\docker\mindspore-ascend-a2_2.7.2.tar swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2:2.7.2-arm64

:warning: 您需要确认仓库中是否存在对应架构专用标签。


:check_mark: 方案四:利用 docker buildx 镜像导出(适用于复杂场景)

如果您正在处理跨平台镜像,建议使用 buildx 构建并导出:

docker buildx create --use --name mybuilder
docker buildx build --platform linux/arm64 --output type=docker,dest=D:\docker\image.tar .

但这适用于构建场景,不适用于已有远程镜像的直接打包


:check_mark: 方案五:更新 Docker 版本或使用容器运行时工具

旧版 Docker(尤其是 Windows 上的 Docker Desktop)对 ARM 多平台支持不够完善。

建议:

  • 升级到最新版 Docker Desktop
  • 或使用 containerd + ctr 工具进行更底层的操作(进阶用户)

:memo: 补充建议

建议项 内容
:wrench: 使用 Huawei SWR 官方文档指引 参考华为云 SWR 镜像仓库的最佳实践,特别是针对 MindSpore Ascend 镜像的使用方式。
:locked_with_key: 确认认证状态 某些私有镜像需要先 docker login swr.cn-south-1.myhuaweicloud.com 登录授权。
:light_bulb: 尝试从其他环境导出 在 Linux ARM64 环境(如鲲鹏云服务器)上拉取并导出镜像,成功率更高。

:white_check_mark: 总结

问题 原因 解决方法
docker pull 成功,但 docker save 失败 多平台 manifest 引发的元数据不一致或缺失 使用镜像 ID 保存、确认标签准确性、升级 Docker、使用专用架构标签

:wrench: 推荐操作顺序:

  1. docker images
  2. docker inspect <image-name>
  3. 使用镜像 ID 执行 docker save
  4. 如仍失败,换到 Linux 环境(尤其 ARM64)操作

如果您能提供镜像的具体来源文档或仓库页面链接,我可以进一步帮助判断是否应使用特定架构标签或其他替代方式。

用户您好,欢迎安装使用MindSpore。还请详细描述下您的本地环境信息和详细安装步骤~

就是一个win10的本地电脑装的docker,如图所示进行的镜像下载,下载的arm的版本,准备打包向服务器上上传。

C:\Users\Administrator>docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2:2.7.2 55411ae1c426 25.4GB 6.69GB

C:\Users\Administrator>docker images | grep mindspore-ascend-a2
WARNING: This output is designed for human readability. For machine-readable output, please use --format.
‘grep’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\Users\Administrator>docker inspect swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2:2.7.2
[
{
“Id”: “sha256:55411ae1c4264acac3a45359eb70155740f748a7dbb39e09045d8b252a3684d4”,
“RepoTags”: [
swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2:2.7.2”
],
“RepoDigests”: [
swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2@sha256:55411ae1c4264acac3a45359eb70155740f748a7dbb39e09045d8b252a3684d4”
],
“Config”: {},
“Architecture”: “”,
“Os”: “”,
“Size”: 3799,
“RootFS”: {},
“Metadata”: {
“LastTagTime”: “2026-02-12T12:51:13.252159859Z”
},
“Descriptor”: {
“mediaType”: “application/vnd.docker.distribution.manifest.list.v2+json”,
“digest”: “sha256:55411ae1c4264acac3a45359eb70155740f748a7dbb39e09045d8b252a3684d4”,
“size”: 743
},
“Identity”: {
“Pull”: [
{
“Repository”: “swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2”
}
]
}
}
]

docker pull --platform linux/arm64/v8 --disable-content-trust=false swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2:2.7.2
我执行这条命令拉的镜像有问题。
我要怎么拉取这个版本的镜像往我打包往我服务器上传呢?

另外是不是没有制作这个MindSpore Transformers
的相关镜像。我是想用这个生态做大模型的微调任务。

我现在服务器外网进行镜像拉取了,为什么选的python3.11版本,拉下来python版本是3.9.11 的版本?

您好,当前发布镜像没有区分python版本,默认提供python3.9版本。如果需要使用更高版本python,参考安装指南,创建python3.11 conda环境并安装mindspore。

关于镜像中后续是否提供其他python版本,或升级默认python版本,当前正在讨论中。

此话题已在最后回复的 60 分钟后被自动关闭。不再允许新回复。