docker/cli · error
context already exists
Error message
context %q already exists
What it means
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.
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
Example fix
# before docker context create prod --docker host=tcp://prod:2376 # 'prod' exists # after docker context rm prod && docker context create prod --docker host=tcp://prod:2376
Defensive patterns
Strategy: validation
Validate before calling
// Check name availability before creating.
if _, err := store.GetMetadata(ctx, name); err == nil {
return fmt.Errorf("context %q already exists; remove it first", name)
} Try / catch
if err := runCreate(...); err != nil {
if strings.Contains(err.Error(), "already exists") {
// prompt to overwrite or pick a new name
}
} Prevention
- Make context creation idempotent in scripts: rm then create, or check first
When it happens
Trigger: Running `docker context create NAME ...` where NAME is already a stored context. The lookup succeeds, so the name is taken.
Common situations: Re-running a setup script; duplicate name after import; leftover context from a previous attempt; case-sensitive name collision.
Related errors
- : parsing
- docker endpoint configuration is required
- unrecognized config key
- other flags may not be combined with --rollback
- duplicate mount target
AI-assisted analysis of docker/cli@4f84911bfe (2026-08-07).
Data as JSON: /api/errors/2049b008c9e72a4f.
Report an issue: GitHub.
Appendix: source
Thrown at cli/command/context/create.go:127
}
if err := validateEndpoints(contextMetadata); err != nil {
return err
}
if err := contextStore.CreateOrUpdate(contextMetadata); err != nil {
return err
}
return contextStore.ResetTLSMaterial(name, &contextTLSData)
}
func checkContextNameForCreation(s store.Reader, name string) error {
if err := store.ValidateContextName(name); err != nil {
return err
}
if _, err := s.GetMetadata(name); !errdefs.IsNotFound(err) {
if err != nil {
return fmt.Errorf("error while getting existing contexts: %w", err)
}
return fmt.Errorf("context %q already exists", name)
}
return nil
}
func createFromExistingContext(s store.ReaderWriter, name string, fromContextName string, opts createOptions) error {
if len(opts.endpoint) != 0 {
return errors.New("cannot use --docker flag when --from is set")
}
reader := store.Export(fromContextName, &descriptionDecorator{
Reader: s,
description: opts.description,
})
defer reader.Close()
return store.Import(name, s, reader)
}
type descriptionDecorator struct {
store.ReaderView on GitHub (pinned to 4f84911bfe)