{"record":{"id":"a49c9c4062cab355","repo":"docker/cli","slug":"no-signer-s-for-repository-s","errorCode":null,"errorMessage":"no signer %s for repository %s","messagePattern":"no signer (.+?) for repository (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/docker-trust/trust/signer_remove.go","lineNumber":119,"sourceCode":"\t\treturn false, errors.New(\"releases is a reserved keyword and cannot be removed\")\n\t}\n\tnotaryRepo, err := newNotaryClient(dockerCLI, imgRefAndAuth, trust.ActionsPushAndPull)\n\tif err != nil {\n\t\treturn false, trust.NotaryError(imgRefAndAuth.Reference().Name(), err)\n\t}\n\tdelegationRoles, err := notaryRepo.GetDelegationRoles()\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"error retrieving signers for %s: %w\", repoName, err)\n\t}\n\tvar role data.Role\n\tfor _, delRole := range delegationRoles {\n\t\tif delRole.Name == signerDelegation {\n\t\t\trole = delRole\n\t\t\tbreak\n\t\t}\n\t}\n\tif role.Name == \"\" {\n\t\treturn false, fmt.Errorf(\"no signer %s for repository %s\", signerName, repoName)\n\t}\n\tallRoles, err := notaryRepo.ListRoles()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\tisLastSigner, err := isLastSignerForReleases(role, allRoles)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\tok, err := maybePromptForSignerRemoval(ctx, dockerCLI, repoName, signerName, isLastSigner, forceYes)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tif !ok {\n\t\treturn false, nil\n\t}","sourceCodeStart":101,"sourceCodeEnd":137,"githubUrl":"https://github.com/docker/cli/blob/4f84911bfe8811e9b028e4b1fee8e7510be79387/cmd/docker-trust/trust/signer_remove.go#L101-L137","documentation":"Returned by removeSingleSigner() in `docker trust signer remove` when GetDelegationRoles() succeeds but none of the returned delegation roles matches the requested signer (targets/<name>). The signer simply does not exist on that repository. %s is the signer name, the second %s is the repository name.","triggerScenarios":"Calling `docker trust signer remove <name> <repo>` where <name> was never added, was already removed, or is misspelled. Also if the wrong repository was specified.","commonSituations":"Typo in signer name; attempting to remove a signer on the wrong repo; the signer was already removed in a prior run; confusion between local username and the signer role name.","solutions":["List current signers with `docker trust inspect <repo>` to see the exact delegation role names.","Use the exact signer name shown by the inspect output.","If already removed, no action is needed — treat as success.","Verify you are targeting the correct repository."],"exampleFix":"// before\n$ docker trust signer remove alic reg.io/app\nError: no signer alic for repository reg.io/app\n\n// after — confirm the real name then remove\n$ docker trust inspect reg.io/app   # shows signer 'alice'\n$ docker trust signer remove alice reg.io/app","handlingStrategy":"validation","validationCode":"// Confirm the signer exists on the repo before attempting removal\nfunc signerPresent(repo, signer string) (bool, error) {\n    out, err := exec.Command(\"docker\", \"trust\", \"inspect\", repo).CombinedOutput()\n    if err != nil { return false, err }\n    return strings.Contains(string(out), \"\\\"\"+signer+\"\\\"\"), nil\n}","typeGuard":null,"tryCatchPattern":"// Treat 'no signer' as idempotent success in automation\nout, err := exec.CommandContext(ctx, \"docker\", \"trust\", \"signer\", \"remove\", name, repo).CombinedOutput()\nif err != nil && strings.Contains(string(out), \"no signer \"+name) {\n    return nil // already absent; nothing to do\n}\nreturn err","preventionTips":["List signers with `docker trust inspect` before removal.","Make removal scripts idempotent by treating 'no signer' as success.","Double-check the signer name spelling and the target repo."],"tags":["docker","trust","notary","validation","not-found"],"backgroundTag":null,"analyzedSha":"4f84911bfe8811e9b028e4b1fee8e7510be79387","analyzedAt":"2026-08-07T12:15:29.814Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}