Skip to content

nydus.remoteimage.v1 in image index causes push to fail with ECR #1692

@Fricounet

Description

@Fricounet

Hello folks, I was trying to fix #1691 when I stumbled on a similar issue for multi-arch images

Basically, when attempting to convert a multi-arch image, I can't push it to ECR and it seems that this part of the manifest is causing issue because when I remove it, it just works:

        "os.features": [
          "nydus.remoteimage.v1"
        ],

Reproducer:

nydusify convert --source nginx:latest --target my-ecr/my-image:nginx --platform "linux/amd64,linux/arm64"
INFO[2025-05-16T18:42:22+02:00] pulling image docker.io/library/nginx:latest  module=converter
INFO[2025-05-16T18:42:40+02:00] pulled image docker.io/library/nginx:latest , elapse 17.986182294s  module=converter
INFO[2025-05-16T18:42:40+02:00] converting image docker.io/library/nginx:latest  module=converter
INFO[2025-05-16T18:42:42+02:00] converted image my-ecr/my-image:nginx , elapse 2.482347474s  module=converter
INFO[2025-05-16T18:42:42+02:00] pushing image my-ecr/my-image:nginx  module=converter
FATA[2025-05-16T18:42:45+02:00] push image: failed commit on ref "index-sha256:74b970f44b893767940d6a292b5eacf981fd011eea4ce9e5dcfcb973859d8098": unexpected status from PUT request to https://my-ecr/v2/my-image/manifests/nginx: 405Method Not Allowed

Or, if you want to get the manifest manually:

nydusify convert --source nginx:latest --target localhost:5000/oci:latest --platform "linux/amd64,linux/arm64"
crane manifest localhost:5000/oci:latest | jq > nydus_manifest.json
aws ecr put-image --repository-name my-repository --image-tag nginx --image-manifest file://nydus_manifest.json
content of nydus_manifest.json { "schemaVersion": 2, "mediaType": "application/vnd.oci.image.index.v1+json", "manifests": [ { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:fd2da0d77212b6acca1a6abfdfe3dbae1c4bdc7e176a5caabc1c5aa41a7d569b", "size": 4443, "annotations": { "com.docker.official-images.bashbrew.arch": "amd64", "org.opencontainers.image.base.digest": "sha256:5accafaaf0f2c0a3ee5f2dcd9a5f2ef7ed3089fe4ac6a9fc9b1cf16396571322", "org.opencontainers.image.base.name": "debian:bookworm-slim", "org.opencontainers.image.created": "2025-04-28T21:42:34Z", "org.opencontainers.image.revision": "eaf8875a1967d24cea6ed8b37109075e39ed9e43", "org.opencontainers.image.source": "https://github.com/nginx/docker-nginx.git#eaf8875a1967d24cea6ed8b37109075e39ed9e43:mainline/debian", "org.opencontainers.image.url": "https://hub.docker.com/_/nginx", "org.opencontainers.image.version": "1.27.5" }, "platform": { "architecture": "amd64", "os": "linux", "os.features": [ "nydus.remoteimage.v1" ] } }, { "mediaType": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:79b251ad8717a8fd7c70ab46b0f6f4369da385549078578513c46da5062ac626", "size": 4447, "annotations": { "com.docker.official-images.bashbrew.arch": "arm64v8", "org.opencontainers.image.base.digest": "sha256:f098d2b31ad6f5cbfa8fc974eb69f9f18dcff506c3984eae54deb8b89731bc00", "org.opencontainers.image.base.name": "debian:bookworm-slim", "org.opencontainers.image.created": "2025-04-28T22:38:21Z", "org.opencontainers.image.revision": "eaf8875a1967d24cea6ed8b37109075e39ed9e43", "org.opencontainers.image.source": "https://github.com/nginx/docker-nginx.git#eaf8875a1967d24cea6ed8b37109075e39ed9e43:mainline/debian", "org.opencontainers.image.url": "https://hub.docker.com/_/nginx", "org.opencontainers.image.version": "1.27.5" }, "platform": { "architecture": "arm64", "os": "linux", "os.features": [ "nydus.remoteimage.v1" ], "variant": "v8" } } ] }

When looking a bit, I found that this field was introduced in this PR. I'm wondering if that is really needed for index manifests and if it can be omitted?

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions