From 39c54e5a7fe4cd43a593e8d096cce56023ac01c0 Mon Sep 17 00:00:00 2001 From: Ioannis Deligiannis Date: Sat, 27 Apr 2024 14:23:47 +0300 Subject: [PATCH] [feature:5023] Add '--replace' option into container creation command --- cli/command/container/create.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cli/command/container/create.go b/cli/command/container/create.go index 70bf509c4e..085c3aeaaa 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 + replace 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.replace, "replace", "", false, "If a container with the same name exists, replace it") // Add an explicit help that doesn't have a `-h` to prevent the conflict // with hostname @@ -250,6 +252,18 @@ func createContainer(ctx context.Context, dockerCli command.Cli, containerCfg *c } } + if options.replace { + if len(options.name) != 0 { + dockerCli.Client().ContainerRemove(ctx, options.name, container.RemoveOptions{ + RemoveVolumes: false, + RemoveLinks: false, + Force: true, + }) + } else { + return "", errors.Errorf("Error: cannot replace container without --name being set") + } + } + hostConfig.ConsoleSize[0], hostConfig.ConsoleSize[1] = dockerCli.Out().GetTtySize() response, err := dockerCli.Client().ContainerCreate(ctx, config, hostConfig, networkingConfig, platform, options.name)