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
- Pull the multi-arch image for the requested platform (dag.Container().from with the platform) so the manifest lands in the host store.
- Verify the image actually publishes a manifest for the requested platform (docker manifest inspect / crane manifest).
- 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
- Check upstream images actually publish manifests for the requested platforms.
- Omit the platform argument when only the default platform is needed.
- Enable remote resolution/pulls instead of relying solely on the host store.
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
- requested platform manifest %s is not present locally
- failed to resolve host image manifest: %w
- no manifest for platform %s and tag %s
- unsupported host image media type %s
- no manifest matches requested platform for %s
AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05).
Data as JSON: /api/errors/badc1aa3b2cdd516.
Report an issue: GitHub.