{"record":{"id":"e488606d9e1b3a28","repo":"GoogleContainerTools/skaffold","slug":"invalid-image-q-no-digest-should-be-specified-u","errorCode":null,"errorMessage":"invalid image %q: no digest should be specified. Use taggers instead: https://skaffold.dev/docs/how-tos/taggers/","messagePattern":"invalid image %q: no digest should be specified\\. Use taggers instead: https://skaffold\\.dev/docs/how-tos/taggers/","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/schema/validation/validation.go","lineNumber":197,"sourceCode":"\t\t\tparsed, err := docker.ParseReference(a.ImageName)\n\t\t\tif err != nil {\n\t\t\t\terrs = append(errs, wrapWithContext(c, ErrorWithLocation{\n\t\t\t\t\tError:    fmt.Errorf(\"invalid image %q: %w\", a.ImageName, err),\n\t\t\t\t\tLocation: curLines,\n\t\t\t\t})...)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif parsed.Tag != \"\" {\n\t\t\t\terrs = append(errs, wrapWithContext(c, ErrorWithLocation{\n\t\t\t\t\tError:    fmt.Errorf(\"invalid image %q: no tag should be specified. Use taggers instead: https://skaffold.dev/docs/how-tos/taggers/\", a.ImageName),\n\t\t\t\t\tLocation: curLines,\n\t\t\t\t})...)\n\t\t\t}\n\n\t\t\tif parsed.Digest != \"\" {\n\t\t\t\terrs = append(errs, wrapWithContext(c, ErrorWithLocation{\n\t\t\t\t\tError:    fmt.Errorf(\"invalid image %q: no digest should be specified. Use taggers instead: https://skaffold.dev/docs/how-tos/taggers/\", a.ImageName),\n\t\t\t\t\tLocation: curLines,\n\t\t\t\t})...)\n\t\t\t}\n\t\t}\n\t}\n\treturn errs\n}\n\nfunc validateArtifactDependencies(configs parser.SkaffoldConfigSet) (cfgErrs []ErrorWithLocation) {\n\tvar artifacts []*latest.Artifact\n\tfor _, c := range configs {\n\t\tartifacts = append(artifacts, c.Build.Artifacts...)\n\t}\n\tcfgErrs = append(cfgErrs, validateUniqueDependencyAliases(&configs, artifacts)...)\n\tcfgErrs = append(cfgErrs, validateAcyclicDependencies(&configs, artifacts)...)\n\tcfgErrs = append(cfgErrs, validateValidDependencyAliases(&configs, artifacts)...)\n\treturn\n}","sourceCodeStart":179,"sourceCodeEnd":215,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/schema/validation/validation.go#L179-L215","documentation":"validateImageNames rejects artifact image names that include a digest (@sha256:...). Skaffold expects tags/digests to come from taggers and the build pipeline, not fixed into the config, so pinning by digest in the artifact image name is disallowed.","triggerScenarios":"skaffold.yaml artifact image name looks like 'gcr.io/proj/app@sha256:abc123...' — parsed.Digest is non-empty after docker.ParseReference.","commonSituations":"Pasting an immutable digest reference from a registry UI or 'docker inspect' output into the skaffold.yaml image field.","solutions":["Remove the @sha256:... digest from the image name in skaffold.yaml","Use a tagger such as sha256 or gitCommit to get reproducible, content-addressed tags","Pin digests at deploy time (kustomize images/ Helm values) instead of in the build artifact name"],"exampleFix":"// before\nbuild:\n  artifacts:\n    - image: gcr.io/my-project/app@sha256:4e3f2a...\n// after\nbuild:\n  artifacts:\n    - image: gcr.io/my-project/app\n  tagPolicy:\n    sha256: {}","handlingStrategy":"validation","validationCode":"// Go: reject digests in artifact image names\nfunc hasDigest(name string) (bool, error) {\n\tref, err := docker.ParseReference(name)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn ref.Digest != \"\", nil\n}","typeGuard":null,"tryCatchPattern":"if pinned, _ := hasDigest(img); pinned {\n\treturn errors.New(\"remove @sha256:... from imageName; pin digests at deploy time instead\")\n}","preventionTips":["Never paste digest references from a registry UI into the skaffold image field","Use the sha256 tagger for content-addressed builds","Pin immutability in deploy manifests (kustomize images, Helm values), not in build config"],"tags":["skaffold","config-validation","image-digest"],"backgroundTag":"invalid-image-reference","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"}