diff --git a/cli/command/container/create.go b/cli/command/container/create.go index 70bf509c4e61..759f688fb21d 100644 --- a/cli/command/container/create.go +++ b/cli/command/container/create.go @@ -39,6 +39,7 @@ type createOptions struct { untrusted bool pull string // always, missing, never quiet bool + force bool } // NewCreateCommand creates a new cobra.Command for `docker create` @@ -69,6 +70,7 @@ func NewCreateCommand(dockerCli command.Cli) *cobra.Command { flags.StringVar(&options.name, "name", "", "Assign a name to the container") flags.StringVar(&options.pull, "pull", PullImageMissing, `Pull image before creating ("`+PullImageAlways+`", "|`+PullImageMissing+`", "`+PullImageNever+`")`) flags.BoolVarP(&options.quiet, "quiet", "q", false, "Suppress the pull output") + flags.BoolVarP(&options.force, "force", "f", false, "Force the creation of the container. (automatically removes the instance if already exists)") // Add an explicit help that doesn't have a `-h` to prevent the conflict // with hostname @@ -250,6 +252,14 @@ func createContainer(ctx context.Context, dockerCli command.Cli, containerCfg *c } } + if options.force && len(options.name) != 0 { + dockerCli.Client().ContainerRemove(ctx, options.name, container.RemoveOptions{ + RemoveVolumes: false, + RemoveLinks: false, + Force: true, + }) + } + hostConfig.ConsoleSize[0], hostConfig.ConsoleSize[1] = dockerCli.Out().GetTtySize() response, err := dockerCli.Client().ContainerCreate(ctx, config, hostConfig, networkingConfig, platform, options.name)