docker/cli · error
unsupported manifest type: %T
Error message
unsupported manifest type: %T
What it means
In pullManifestList each child entry of a manifest list is expected to be a schema2 or OCI manifest. If a child is any other type (legacy schema 1, a nested list, or an unknown media type), this fires and embeds the Go type name via %T so you can see exactly what was unexpected.
Solutions
- Rebuild the manifest list with current schema2/OCI children (`docker manifest create`).
- Inspect the list with `docker manifest inspect <ref>` to see each child's media type.
- Upgrade the CLI/registry to matching current versions.
- If a specific platform child is fine, pull that child digest directly with GetManifest.
Example fix
# rebuild the manifest list with current images docker manifest create myreg/img:multi myreg/img:amd64 myreg/img:arm64 docker manifest push myreg/img:multi
Defensive patterns
Strategy: validation
Validate before calling
// Inspect each child's media type before iterating a manifest list.
var okChild = map[string]bool{
"application/vnd.docker.distribution.manifest.v2+json": true,
"application/vnd.oci.image.manifest.v1+json": true,
}
// read child descriptors and reject lists containing unsupported media types up front. Prevention
- Build manifest lists with current schema2/OCI children only.
- Inspect lists with docker manifest inspect before relying on them.
- Keep registry and CLI versions aligned.
When it happens
Trigger: A manifest list whose child descriptors resolve to a type other than schema2 / OCI DeserializedManifest — e.g. an old multi-arch image containing schema-1 children, or a malformed/nested index.
Common situations: Legacy multi-arch images built with deprecated tooling; registry/custom manifest formats; version skew where a newer registry emits a manifest subtype this CLI does not handle.
Related errors
- is a manifest list
- is not a manifest
- unsupported manifest format
- failed to put manifest
- refusing to amend an existing manifest list with no --amend…
AI-assisted analysis of docker/cli@4f84911bfe (2026-08-07).
Data as JSON: /api/errors/5ba3a12f911d6e14.
Report an issue: GitHub.
Appendix: source
Thrown at internal/registryclient/fetcher.go:183
}
manifest, err := manSvc.Get(ctx, manifestDescriptor.Digest)
if err != nil {
return nil, err
}
manifestRef, err := reference.WithDigest(ref, manifestDescriptor.Digest)
if err != nil {
return nil, err
}
var imageManifest types.ImageManifest
switch v := manifest.(type) {
case *schema2.DeserializedManifest:
imageManifest, err = pullManifestSchemaV2(ctx, manifestRef, repo, *v)
case *ocischema.DeserializedManifest:
imageManifest, err = pullManifestOCISchema(ctx, manifestRef, repo, *v)
default:
err = fmt.Errorf("unsupported manifest type: %T", manifest)
}
if err != nil {
return nil, err
}
// Replace platform from config
p := manifestDescriptor.Platform
imageManifest.Descriptor.Platform = types.OCIPlatform(&p)
infos = append(infos, imageManifest)
}
return infos, nil
}
func continueOnError(err error) bool {
switch v := err.(type) {
case errcode.Errors:
if len(v) == 0 {View on GitHub (pinned to 4f84911bfe)