slimtoolkit/slim · critical

dockerimage.LoadPackage: missing OCI Image Manifest object f

Error message

dockerimage.LoadPackage: missing OCI Image Manifest object for image ID=%s / archive='%s' / files=%+v

What it means

dockerimage.LoadPackage validates that, for OCI-format packages, the OCI Image Manifest object was successfully loaded from the archive. A nil pkg.ManifestOCI means the archive's files did not yield the OCI manifest (index/manifest blob missing or unrecognized), so loading aborts with the image ID, archive path, and file list for diagnosis.

Source

Thrown at pkg/docker/dockerimage/dockerimage.go:1119

						changeDataMatchers,
						utf8Detector,
						processorParams,
					)
					if err != nil {
						log.Errorf("dockerimage.LoadPackage: error reading oci layer from archive(%s/%s) - %v", archivePath, hdr.Name, err)
						return nil, err
					}
					layers[layerID] = layer
					log.Debugf("dockerimage.LoadPackage: saved layer '%s' from archive - %s",
						layerID, archivePath)
				}
			}
		}
	}

	if pkg.Format == FormatOCI {
		if pkg.ManifestOCI == nil {
			return nil, fmt.Errorf("dockerimage.LoadPackage: missing OCI Image Manifest object for image ID=%s / archive='%s' / files=%+v",
				imageID, archivePath, archiveFiles)
		}
	} else {
		if pkg.Manifest == nil {
			return nil, fmt.Errorf("dockerimage.LoadPackage: missing manifest object for image ID=%s / archive='%s' / files=%+v",
				imageID, archivePath, archiveFiles)
		}
	}

	if pkg.Config == nil {
		return nil, fmt.Errorf("dockerimage.LoadPackage: missing image config object for image ID=%s / archive='%s' / files=%+v",
			imageID, archivePath, archiveFiles)
	}

	if len(layers) == 0 {
		//todo: display non-image layer metadata if there are any
		//todo: save non-image layer metadata/data
		log.Debugf("dockerimage.LoadPackage: no image layers in archive - %s (%+v)",

View on GitHub (pinned to 81940d17fa)

Solutions

  1. Re-export/re-download the image archive (skopeo copy / crane pull / docker save) and verify it completes without interruption.
  2. Check the error's files list and the OCI index: ensure the manifest digest referenced exists as a blob in the archive.
  3. For multi-arch images, save a platform-specific manifest (e.g. `docker save` of a pulled single-platform image) instead of only the index.
  4. Confirm the package's detected format matches the archive type; force the correct format if auto-detection mislabeled it.

Example fix

// before: index-only archive missing manifest blobs
$ crane manifest myapp.tar  -> error: missing OCI Image Manifest
// after: fetch full image with all blobs
$ crane pull --platform=linux/amd64 myapp:1.2 myapp.tar
Defensive patterns

Strategy: validation

Validate before calling

// verify OCI archive completeness before LoadPackage
func ociManifestPresent(files []string, indexDigest string) bool {
	for _, f := range files {
		if strings.Contains(f, indexDigest) { return true }
	}
	return false
}
// also: skopeo inspect oci-archive:app.tar must succeed

Type guard

func isOCILayout(p *dockerimage.Package) bool { return p != nil && p.Format == dockerimage.FormatOCI }

Try / catch

pkg, err := dockerimage.LoadPackage(...)
if err != nil && strings.Contains(err.Error(), "missing OCI Image Manifest") {
	// re-pull the archive; do not retry parsing the same file
}

Prevention

When it happens

Trigger: Calling LoadPackage on an OCI-layout tar/archive whose files do not include a resolvable OCI image manifest for the given imageID — e.g. an image index pointing to a missing manifest blob, a truncated archive, or files parsed under FormatOCI that are actually docker/save format.

Common situations: Partially downloaded or truncated OCI archives (craned/skopeo copy interrupted); multi-arch image indexes saved without the child manifests; archives renamed/edited so the manifest reference no longer matches; wrong format detection forcing FormatOCI on a docker-archive.

Related errors


AI-assisted analysis of slimtoolkit/slim@81940d17fa (2026-08-31). Data as JSON: /api/errors/39c6a61ea5857172. Report an issue: GitHub.