{"record":{"id":"2049b008c9e72a4f","repo":"docker/cli","slug":"context-q-already-exists","errorCode":null,"errorMessage":"context %q already exists","messagePattern":"context %q already exists","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/command/context/create.go","lineNumber":127,"sourceCode":"\t}\n\tif err := validateEndpoints(contextMetadata); err != nil {\n\t\treturn err\n\t}\n\tif err := contextStore.CreateOrUpdate(contextMetadata); err != nil {\n\t\treturn err\n\t}\n\treturn contextStore.ResetTLSMaterial(name, &contextTLSData)\n}\n\nfunc checkContextNameForCreation(s store.Reader, name string) error {\n\tif err := store.ValidateContextName(name); err != nil {\n\t\treturn err\n\t}\n\tif _, err := s.GetMetadata(name); !errdefs.IsNotFound(err) {\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error while getting existing contexts: %w\", err)\n\t\t}\n\t\treturn fmt.Errorf(\"context %q already exists\", name)\n\t}\n\treturn nil\n}\n\nfunc createFromExistingContext(s store.ReaderWriter, name string, fromContextName string, opts createOptions) error {\n\tif len(opts.endpoint) != 0 {\n\t\treturn errors.New(\"cannot use --docker flag when --from is set\")\n\t}\n\treader := store.Export(fromContextName, &descriptionDecorator{\n\t\tReader:      s,\n\t\tdescription: opts.description,\n\t})\n\tdefer reader.Close()\n\treturn store.Import(name, s, reader)\n}\n\ntype descriptionDecorator struct {\n\tstore.Reader","sourceCodeStart":109,"sourceCodeEnd":145,"githubUrl":"https://github.com/docker/cli/blob/4f84911bfe8811e9b028e4b1fee8e7510be79387/cli/command/context/create.go#L109-L145","documentation":"Thrown by checkContextNameForCreation when GetMetadata returns nil error, meaning a context with the given name already exists in the store. Creation is refused to avoid overwriting.","triggerScenarios":"Running `docker context create NAME ...` where NAME is already a stored context. The lookup succeeds, so the name is taken.","commonSituations":"Re-running a setup script; duplicate name after import; leftover context from a previous attempt; case-sensitive name collision.","solutions":["Remove the existing context first: docker context rm NAME","Use the update path instead: docker context update / re-create after rm","Choose a different name","List contexts to confirm: docker context ls"],"exampleFix":"# before\ndocker context create prod --docker host=tcp://prod:2376  # 'prod' exists\n# after\ndocker context rm prod && docker context create prod --docker host=tcp://prod:2376","handlingStrategy":"validation","validationCode":"// Check name availability before creating.\nif _, err := store.GetMetadata(ctx, name); err == nil {\n    return fmt.Errorf(\"context %q already exists; remove it first\", name)\n}","typeGuard":null,"tryCatchPattern":"if err := runCreate(...); err != nil {\n    if strings.Contains(err.Error(), \"already exists\") {\n        // prompt to overwrite or pick a new name\n    }\n}","preventionTips":["Make context creation idempotent in scripts: rm then create, or check first"],"tags":["docker","context","duplicate","validation"],"backgroundTag":null,"analyzedSha":"4f84911bfe8811e9b028e4b1fee8e7510be79387","analyzedAt":"2026-08-07T12:15:29.814Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}