有没有办法使用 docker manifest-list 在 ECR 中构建多架构镜像?

Ash*_*Jha 2 amazon-web-services amazon-ecs docker amazon-ecr multiarch

我正在尝试使用 Amazon ECR 来存储我的图像。

现在,我希望我的 image:tag 适用于不同的操作系统和架构,如 linux/amd64、linux/arm64、windows 等。

当我使用 docker 时这很好,但似乎我无法让它与 ECR 一起工作。

Docker 表示您可以将其推送到不安全的注册表:
https://docs.docker.com/engine/reference/commandline/manifest/

失败的命令:

docker buildx build --platform linux/amd64,linux/arm64 -t 5XXXXXXXXXX.dkr.ecr.ap-southeast-2.amazonaws.com/imagename:tag --push .
Run Code Online (Sandbox Code Playgroud)

此命令成功:

docker buildx build --platform linux/arm64 -t 5XXXXXXXXXX.dkr.ecr.ap-southeast-2.amazonaws.com/imagename:tag --push .
Run Code Online (Sandbox Code Playgroud)

多平台镜像可以推送到Docker Hub。


我想知道我们如何做到这一点。这是我的想法。如果我错了,请纠正我。

我们可以创建自己的清单文件,其中包含已放置在 ECR 存储库中的图像吗?

就像是:

image: image:multi-arch
manifests:
   -
      image: 5XXXXXXXXXX.dkr.ecr.ap-southeast-2.amazonaws.com/imagename:tag/i1-linuxamd64
      platform:
             architecture: arm64
      os: linux

   -
      image: 5XXXXXXXXXX.dkr.ecr.ap-southeast-2.amazonaws.com/imagename:tag/i2-intelx86
      platform:
             architecture: intelx86
      os: Windows
Run Code Online (Sandbox Code Playgroud)

现在我们有一个名为image:multi-arch的新图像。然后我们使用这个镜像并期望它能够根据清单自动获取目标架构。

如果我将最终图像推送到 ECR,它会起作用吗?难道我做错了什么?请随时纠正我。