{"record":{"id":"e827c38c22cc223c","repo":"GoogleContainerTools/skaffold","slug":"failed-to-resolve-the-digest-of-s-does-the-image","errorCode":null,"errorMessage":"failed to resolve the digest of %s: does the image exist remotely?","messagePattern":"failed to resolve the digest of (.+?): does the image exist remotely\\?","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/runner/render.go","lineNumber":52,"sourceCode":")\n\nfunc (r *SkaffoldRunner) Render(ctx context.Context, out io.Writer, builds []graph.Artifact, offline bool) (manifest.ManifestListByConfig, error) {\n\trenderOut, postRenderFn, err := util.WithLogFile(time.Now().Format(util.TimeFormat)+\".log\", out, r.runCtx.Muted())\n\tif err != nil {\n\t\treturn manifest.ManifestListByConfig{}, err\n\t}\n\tdefer postRenderFn()\n\n\teventV2.TaskInProgress(constants.Render, \"Render Manifests\")\n\tif r.runCtx.RenderOnly() {\n\t\t// Fetch the digest and append it to the tag with the format of \"tag@digest\"\n\t\tif r.runCtx.DigestSource() == constants.RemoteDigestSource {\n\t\t\tfor i, a := range builds {\n\t\t\t\t// remote digest to platform dependant build not supported\n\t\t\t\tdigest, err := docker.RemoteDigest(a.Tag, r.runCtx, nil)\n\t\t\t\tif err != nil {\n\t\t\t\t\teventV2.TaskFailed(constants.Render, err)\n\t\t\t\t\treturn manifest.ManifestListByConfig{}, fmt.Errorf(\"failed to resolve the digest of %s: does the image exist remotely?\", a.Tag)\n\t\t\t\t}\n\t\t\t\tbuilds[i].Tag = build.TagWithDigest(a.Tag, digest)\n\t\t\t}\n\t\t}\n\t\tif r.runCtx.DigestSource() == constants.NoneDigestSource {\n\t\t\toutput.Default.Fprintln(out, \"--digest-source set to 'none', tags listed in Kubernetes manifests will be used for render\")\n\t\t}\n\t}\n\n\tctx, endTrace := instrumentation.StartTrace(ctx, \"Render\")\n\tmanifestList, err := r.renderer.Render(ctx, renderOut, builds, offline)\n\tif err != nil {\n\t\teventV2.TaskFailed(constants.Render, err)\n\t\tendTrace(instrumentation.TraceEndError(err))\n\t\treturn manifest.ManifestListByConfig{}, err\n\t}\n\n\tendTrace()","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/runner/render.go#L34-L70","documentation":"During Render, when --digest-source=remote, Skaffold resolves each built image tag to a remote registry digest via docker.RemoteDigest. If the digest cannot be fetched, it reports that the tag could not be resolved remotely — usually because the image is not present in the remote registry.","triggerScenarios":"Running a render command (Render method) with runCtx.DigestSource() == constants.RemoteDigestSource and docker.RemoteDigest(a.Tag, ...) failing for one of the builds — image not pushed, wrong tag, private registry auth missing, or network/registry outage.","commonSituations":"Rendering before images were pushed to the registry, typos in image tags, using `skaffold render` in CI without docker/registry credentials, or pointing at a registry that does not contain the built artifacts.","solutions":["Push the images to the remote registry first (or run `skaffold build --push`)","Verify the exact tag exists: `docker manifest inspect <tag>`","Add registry credentials (docker login / credential helper) for private registries","Use --digest-source=local or =none if remote resolution is not required"],"exampleFix":"// before\nskaffold render --digest-source=remote\n// after: ensure images exist or relax digest source\nskaffold build --push && skaffold render --digest-source=remote\n# or\nskaffold render --digest-source=local","handlingStrategy":"retry","validationCode":"digest, err := docker.RemoteDigest(tag, runCtx, nil)\nif err != nil { return fmt.Errorf(\"pre-flight: image %s not resolvable: %w\", tag, err) }","typeGuard":null,"tryCatchPattern":"for attempt := 0; attempt < 3; attempt++ {\n    out, err := r.Render(ctx, out, builds, res)\n    if err == nil || !strings.Contains(err.Error(), \"does the image exist remotely\") { return out, err }\n    time.Sleep(backoff(attempt))\n}\nreturn out, err","preventionTips":["Always `skaffold build --push` before `skaffold render --digest-source=remote`","Docker-login to private registries in CI before rendering","Verify tags with `docker manifest inspect` in pre-flight checks","Use --digest-source=local in offline environments"],"tags":["skaffold","docker","registry","digest","render"],"backgroundTag":"image-not-found-in-registry","analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}