docker manifest 本质是聚合已存在的单架构镜像为多架构逻辑标签,需先启用实验性功能、推送各架构镜像、创建并标注manifest列表后推送,最后通过inspect和跨架构pull验证。
用 docker manifest 组合多架构镜像标签,本质是把几个已存在的单架构镜像(比如 myapp:latest-amd64 和 myapp:latest-arm64)聚合成一个逻辑标签(如 myapp:latest),让 docker pull 能按需自动拉取对应架构的镜像。
前提:启用实验性功能
manifest 命令默认不启用,需手动开启:
- 编辑
~/.docker/config.json,添加{"experimental": "enabled"} - 重启 Docker Desktop(macOS/Windows)或重载 daemon(Linux)
- 运行
docker version,确认 Client 下显示 Experimental: true
准备并推送单架构镜像
manifest 不负责构建,只做聚合。你得先有各平台的镜像,并推送到同一仓库:
- 在 x86_64 机器上构建并推送:
docker build -t your-registry/myapp:latest-amd64 . && docker push your-registry/myapp:latest-amd64 - 在 ARM64 机器(或用 buildx 交叉构建)上构建并推送:
docker build -t your-registry/myapp:latest-arm64 . && docker push your-registry/myapp:latest-arm64 - 确保两个镜像都已成功推送到远程仓库,且可被 manifest 命令访问
创建并标注 manifest 列表
执行三步操作,缺一不可:
-
创建清单:
docker manifest create your-registry/myapp:latest your-registry/myapp:latest-amd64 your-registry/myapp:latest-arm64 -
标注架构信息(关键!否则客户端无法识别):
docker manifest annotate your-registry/myapp:latest your-registry/myapp:latest-amd64 --arch amd64 --os linuxdocker manifest annotate your-registry/myapp:latest your-registry/myapp:latest-arm64 --arch arm64 --os linux -
推送清单:
docker manifest push your-registry/myapp:latest
验证是否生效
推送后立即检查:
- 查看清单内容:
docker manifest inspect your-registry/myapp:latest,输出应含"manifests"数组,每个条目带"platform": {"architecture": "...", "os": "linux"} - 在不同架构机器上执行
docker pull your-registry/myapp:latest,确认拉取的是对应架构的镜像层(可通过docker image ls或docker inspect查 digest 匹配) - 注意:若拉取失败,常见原因是未正确标注
--arch或镜像未公开/未登录仓库











