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

  1. Remove the existing context first: docker context rm NAME
  2. Use the update path instead: docker context update / re-create after rm
  3. Choose a different name
  4. 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

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


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.Reader

View on GitHub (pinned to 4f84911bfe)