答案内容由AI生成,仅供参考:
总结
| 问题 | 原因 | 解决方法 |
|---|---|---|
docker pull 成功,但 docker save 失败 |
多平台 manifest 引发的元数据不一致或缺失 | 使用镜像 ID 保存、确认标签准确性、升级 Docker、使用专用架构标签 |
推荐操作顺序:
docker imagesdocker inspect <image-name>- 使用镜像 ID 执行
docker save - 如仍失败,换到 Linux 环境(尤其 ARM64)操作
点击此处查看详细分析解答
Docker 镜像拉取与打包问题分析
根据您提供的信息,您已成功拉取指定版本的 Docker 镜像,但在尝试使用 docker save 打包时遇到了错误:
Error response from daemon: unable to create manifests file: NotFound: content digest sha256:93a1854c8e188605d13c868f4d79ac84ab2816b972a313f2b3370a902dfb46c: not found
下面对问题进行详细解析和解决方案说明。
问题根源分析
虽然 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 的核心原因。
解决方案
方案一:确认本地镜像是否存在且完整
运行以下命令查看本地是否存在该镜像:
docker images | grep mindspore-ascend-a2
或更精确地:
docker inspect swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-ascend-a2:2.7.2
如果能正常输出信息,说明镜像是存在的;否则需重新拉取。
方案二:使用镜像 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
这避免了因镜像命名解析失败导致的问题。
方案三:禁用 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
您需要确认仓库中是否存在对应架构专用标签。
方案四:利用 docker buildx 镜像导出(适用于复杂场景)
如果您正在处理跨平台镜像,建议使用 buildx 构建并导出:
docker buildx create --use --name mybuilder
docker buildx build --platform linux/arm64 --output type=docker,dest=D:\docker\image.tar .
但这适用于构建场景,不适用于已有远程镜像的直接打包。
方案五:更新 Docker 版本或使用容器运行时工具
旧版 Docker(尤其是 Windows 上的 Docker Desktop)对 ARM 多平台支持不够完善。
建议:
- 升级到最新版 Docker Desktop
- 或使用
containerd+ctr工具进行更底层的操作(进阶用户)
补充建议
| 建议项 | 内容 |
|---|---|
| 参考华为云 SWR 镜像仓库的最佳实践,特别是针对 MindSpore Ascend 镜像的使用方式。 | |
某些私有镜像需要先 docker login swr.cn-south-1.myhuaweicloud.com 登录授权。 |
|
| 在 Linux ARM64 环境(如鲲鹏云服务器)上拉取并导出镜像,成功率更高。 |
总结
| 问题 | 原因 | 解决方法 |
|---|---|---|
docker pull 成功,但 docker save 失败 |
多平台 manifest 引发的元数据不一致或缺失 | 使用镜像 ID 保存、确认标签准确性、升级 Docker、使用专用架构标签 |
推荐操作顺序:
docker imagesdocker inspect <image-name>- 使用镜像 ID 执行
docker save - 如仍失败,换到 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 分钟后被自动关闭。不再允许新回复。

