{"record":{"id":"921622982b5f7b88","repo":"wagoodman/dive","slug":"unable-to-determine-image-resolver","errorCode":null,"errorMessage":"unable to determine image resolver","messagePattern":"unable to determine image resolver","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"dive/get_image_resolver.go","lineNumber":72,"sourceCode":"\tcase SourceDockerArchive.String():\n\t\treturn SourceDockerArchive, imageSource\n\tcase \"docker-tar\":\n\t\treturn SourceDockerArchive, imageSource\n\t}\n\treturn SourceUnknown, \"\"\n}\n\nfunc GetImageResolver(r ImageSource) (image.Resolver, error) {\n\tswitch r {\n\tcase SourceDockerEngine:\n\t\treturn docker.NewResolverFromEngine(), nil\n\tcase SourcePodmanEngine:\n\t\treturn podman.NewResolverFromEngine(), nil\n\tcase SourceDockerArchive:\n\t\treturn docker.NewResolverFromArchive(), nil\n\t}\n\n\treturn nil, fmt.Errorf(\"unable to determine image resolver\")\n}\n","sourceCodeStart":54,"sourceCodeEnd":74,"githubUrl":"https://github.com/wagoodman/dive/blob/d6c691947f8fda635c952a17ee3b7555379d58f0/dive/get_image_resolver.go#L54-L74","documentation":"Returned by dive.GetImageResolver (dive/get_image_resolver.go:72) when the ImageSource value falls outside the handled set {SourceDockerEngine, SourcePodmanEngine, SourceDockerArchive}. The zero value SourceUnknown (as well as any out-of-range integer) hits the default branch, so this error really means 'the image source was never recognized'.","triggerScenarios":"ParseImageSource returning SourceUnknown because the --source/-s flag value is not exactly 'docker', 'podman', 'docker-archive' (or legacy 'docker-tar'); DeriveImageSource returning SourceUnknown because the image argument has no 'scheme://' prefix and no --source flag was given; calling GetImageResolver(SourceUnknown) or GetImageResolver(42) directly from library code.","commonSituations":"Running 'dive alpine:3' without --source while DOCKER_HOST is unset so auto-detection has nothing to probe; typos like --source dockerEngine or --source docker_engine; new/renamed sources after a dive upgrade; library users passing an uninitialized ImageSource variable.","solutions":["Pass an explicit source: dive docker://<image>, dive podman://<image>, or dive --source docker-archive docker-image.tar","Fix the flag spelling - only lowercase 'docker', 'podman', 'docker-archive' (alias 'docker-tar') are accepted","Library callers: validate the source before resolving - reject ImageSource values not in ImageSources or equal to SourceUnknown","Ensure the image argument includes its scheme prefix when you rely on DeriveImageSource"],"exampleFix":"// before\nresolver, err := dive.GetImageResolver(src) // src == dive.SourceUnknown\n\n// after\nif src == dive.SourceUnknown {\n    return fmt.Errorf(\"unsupported image source (have you tried --source docker|podman|docker-archive?)\")\n}\nresolver, err := dive.GetImageResolver(src)","handlingStrategy":"validation","validationCode":"// validate before resolving\nif src == dive.SourceUnknown {\n    src = dive.ParseImageSource(flagSource) // \"docker\" | \"podman\" | \"docker-archive\" | \"docker-tar\"\n}\nif src == dive.SourceUnknown {\n    return fmt.Errorf(\"unsupported source %q (want docker|podman|docker-archive)\", flagSource)\n}\nresolver, err := dive.GetImageResolver(src)","typeGuard":null,"tryCatchPattern":"resolver, err := dive.GetImageResolver(src)\nif err != nil {\n    if strings.Contains(err.Error(), \"unable to determine image resolver\") {\n        // guide the user to a valid source rather than failing opaquely\n        return fmt.Errorf(\"source not recognized; use --source docker|podman|docker-archive or a scheme:// prefix\")\n    }\n    return err\n}","preventionTips":["Always pass an explicit --source or scheme-prefixed image argument","Validate source strings against dive.ImageSources before use","Reject ImageSource zero values in library code before calling GetImageResolver"],"tags":["configuration","image-source","cli","validation"],"backgroundTag":null,"analyzedSha":"d6c691947f8fda635c952a17ee3b7555379d58f0","analyzedAt":"2026-08-15T09:42:35.293Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}