我有 DockerHubx86_64
为我的项目构建映像。图像具有以下命名:myname/project:version_architecture
; 比如foo/bar:1.0.0_x86_64
。
然后我aarch64
在 RPi4: 上构建图像foo/bar:1.0.0_aarch64
,然后将其推送到 DockerHub。
现在我想要一个包含它们的清单,以便我可以foo/bar:1.0.0
在任何地方使用它并且它可以工作。
AFAIK,以下命令应该可以工作(在 RPi 上运行):
docker build -t foo/bar:1.0.0_aarch64 .
docker push foo/bar:1.0.0_aarch64
docker manifest create foo/bar:1.0.0 foo/bar:1.0.0_aarch64
docker manifest annotate foo/bar:1.0.0 foo/bar:1.0.0_x86_64
docker manifest push foo/bar:1.0.0
但由于某种原因,该annotate
步骤有时会失败:
manifest for image foo/bar:1.0.0_x86_64 does not exist in foo/bar:1.0.0
而以下解决方法(通常)可以代替:
docker build -t foo/bar:1.0.0_aarch64 .
docker push foo/bar:1.0.0_aarch64
docker manifest create foo/bar:1.0.0 foo/bar:1.0.0_aarch64
docker manifest annotate foo/bar:1.0.0 foo/bar:1.0.0_x86_64
docker manifest create foo/bar:1.0.0 foo/bar:1.0.0_x86_64 --amend
docker manifest annotate foo/bar:1.0.0 foo/bar:1.0.0_aarch64
docker manifest push foo/bar:1.0.0
我错过了什么吗?