我正在尝试创建一个Docker清单,以便在Dockerhub上创建一个多平台镜像my-repo/my-image:<some-tag>
。同时为两个平台构建不起作用,因为Dockerfile需要挂载已编译二进制文件的tarball。还请注意,我在GitHub Actions CI中使用了AMD64 VM,因此必须进行ARM64交叉编译。
要构建,我使用类似于以下内容的东西:
# Build & push for ARM64; using registry cache since this takes forever to build
docker buildx build . \
--tag my-repo/my-image-arm64:<some-tag> \
--platform=linux/arm64 \
--output type=registry \
--build-arg tarball_uri=<link-to-arm64-tarball> \
--cache-to type=registry,ref=my-repo/my-image-cache,mode=max \
--cache-from type=registry,ref=my-repo/my-image-cache,mode=max
# Build & push for AMD64; a more conventional build
docker buildx build . \
--tag my-repo/my-image-amd64:<some-tag> \
--build-arg tarball_uri=<link-to-amd64-tarball>
docker push my-repo/my-image-amd64:<some-tag>
但是,当我运行以下命令时:
docker manifest create my-repo/image-name:<some-tag> \
my-repo/my-image-amd64:<some-tag> \
my-repo/my-image-arm64:<some-tag>
我收到了错误信息
docker.io/my-repo/my-image-arm64:<some-tag>
是一个清单列表,仅适用于ARM64镜像。通常会创建一个清单列表,但没有my-repo/my-image-arm64:<some-tag>
清单。
假设my-repo/my-image-arm64:<some-tag>
现在实际上是一个清单列表,我执行以下操作
docker manifest inspect my-repo/my-image-arm64:<some-tag>
但随之而来的是
no such manifest: docker.io/my-repo/my-image-arm64:<some-tag>
这里我做错了什么,有什么想法吗?