dagger/dagger · error

no manifest for platform %s in host store

Error message

no manifest for platform %s in host store

What it means

The host content store contains the image index but no manifest at all matching the requested platform. Unlike error 1832 (a partial/near match existed), here the index had no compatible manifest entry for the platform, so resolution of the host-store image fails outright.

Source

Thrown at core/schema/host.go:702

func resolveHostStoreManifest(
	ctx context.Context,
	store content.Store,
	desc ocispec.Descriptor,
	platform ocispec.Platform,
) (*ocispec.Descriptor, error) {
	matcher := platforms.Only(platforms.Normalize(platform))
	target, matched, err := resolveHostStoreManifestMatch(ctx, store, desc, matcher)
	if err != nil {
		return nil, err
	}
	if target != nil {
		return target, nil
	}
	if matched {
		return nil, fmt.Errorf("requested platform manifest %s is not present locally", platforms.Format(platform))
	}
	return nil, fmt.Errorf("no manifest for platform %s in host store", platforms.Format(platform))
}

func resolveHostStoreManifestMatch(
	ctx context.Context,
	store content.Store,
	desc ocispec.Descriptor,
	matcher platforms.MatchComparer,
) (*ocispec.Descriptor, bool, error) {
	switch desc.MediaType {
	case ocispec.MediaTypeImageManifest, images.MediaTypeDockerSchema2Manifest:
		if _, err := store.Info(ctx, desc.Digest); err != nil {
			if cerrdefs.IsNotFound(err) {
				return nil, true, nil
			}
			return nil, false, fmt.Errorf("stat host manifest %s: %w", desc.Digest, err)
		}
		return &desc, true, nil

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Pull the multi-arch image for the requested platform (dag.Container().from with the platform) so the manifest lands in the host store.
  2. Verify the image actually publishes a manifest for the requested platform (docker manifest inspect / crane manifest).
  3. Drop the explicit platform argument to fall back to the default platform available locally.

Example fix

// before
const img = dag.host().containerImage("alpine", {platform: "linux/riscv64"})
// after
const img = await dag.container({platform: "linux/riscv64"}).from("alpine") // ensures the platform is fetched
Defensive patterns

Strategy: fallback

Validate before calling

// verify the image publishes the platform before requesting
// docker manifest inspect <image> | jq '.manifests[].platform'

Try / catch

try { img = await dag.host().containerImage(name, {platform}) } catch (e) { if (String(e).includes("no manifest for platform")) { img = await dag.container().from(name) } else throw e }

Prevention

When it happens

Trigger: Calling Host.containerImage(name, platform: X) where the local OCI index for that image lists only manifests for platforms other than X.

Common situations: Multi-arch image cached locally with only the host's native architecture; requesting a different platform (e.g. windows/amd64) that the upstream image never published, or running with remote resolution disabled.

Related errors


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/badc1aa3b2cdd516. Report an issue: GitHub.