Skip to content

Skopeo copy fails with preserve-digests and OCI image with zstd compression #2627

@dkatavic

Description

@dkatavic

Hi Skopeo Team, I'm having an issue with skopeo copy I hope you can help me with

For the specific OCI images, when using skopeo copy command, skopeo annotates manifest index with

"annotations": {
            "io.github.containers.compression.zstd": "true"
        }

which changes digest of a manifest index. If using --preserve-digests flag, skopeo will fail with a

FATA[0005] Manifest list must be converted to type "application/vnd.oci.image.index.v1+json" to be written to destination, but we cannot modify it: "Instructed to preserve digests"

Error message. I'm not sure why the annotation is added, I think because the referenced image manifest contains layers with zstd compression, so the annotations seems as an extra informational piece. We have noticed this on multiple images, Issue can be reproduced with the following command:

skopeo copy --debug --all --preserve-digests --digestfile /tmp/digests.txt \
  --src-username $USERNAME --src-password $PASSWORD \
  --dest-creds token:$DEST_TOKEN \
  docker://registry.gitlab.com/gitlab-org/gitlab-runner/helper-entrypoint:latest \
  docker://ourprivateoci.io/gitlab-org/gitlab-runner/helper-entrypoint:latest

I can't find a way of stopping skopeo from annotating manifest, if there is one, please let me know. I have tried disabling compression on dst from skopeo, but the annotation is still added. Is this annotation just extra informational piece?

Would it make sense to add a flag that can disable mutating source manifest?

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugA defect in an existing functionality (or a PR fixing it)

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions