diff --git a/cli/command/container/kill.go b/cli/command/container/kill.go index feedbc01114b..f1e8d8820eed 100644 --- a/cli/command/container/kill.go +++ b/cli/command/container/kill.go @@ -26,6 +26,9 @@ func NewKillCommand(dockerCli command.Cli) *cobra.Command { Short: "Kill one or more running containers", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { + if err := cli.CheckContainerNames(args...); err != nil { + return err + } opts.containers = args return runKill(dockerCli, &opts) }, diff --git a/cli/command/container/rm.go b/cli/command/container/rm.go index 2dcd4b6ace94..3e738dbcf9bd 100644 --- a/cli/command/container/rm.go +++ b/cli/command/container/rm.go @@ -29,6 +29,9 @@ func NewRmCommand(dockerCli command.Cli) *cobra.Command { Short: "Remove one or more containers", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { + if err := cli.CheckContainerNames(args...); err != nil { + return err + } opts.containers = args return runRm(dockerCli, &opts) }, diff --git a/cli/command/container/stop.go b/cli/command/container/stop.go index e299175436fa..7fd4f11dab11 100644 --- a/cli/command/container/stop.go +++ b/cli/command/container/stop.go @@ -28,6 +28,9 @@ func NewStopCommand(dockerCli command.Cli) *cobra.Command { Short: "Stop one or more running containers", Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { + if err := cli.CheckContainerNames(args...); err != nil { + return err + } opts.containers = args opts.timeChanged = cmd.Flags().Changed("time") return runStop(dockerCli, &opts) diff --git a/cli/names.go b/cli/names.go new file mode 100644 index 000000000000..aca492093c38 --- /dev/null +++ b/cli/names.go @@ -0,0 +1,29 @@ +package cli + +import ( + "fmt" + "regexp" + "strings" +) + +var ( + validContainerNamePattern = regexp.MustCompile("^[a-zA-Z0-9][a-zA-Z0-9_.-]+$") +) + +// CheckContainerName check container's name is valid or not +func CheckContainerName(name string) error { + if !validContainerNamePattern.MatchString(strings.TrimPrefix(name, "/")) { + return fmt.Errorf("container name %s is invalid", name) + } + return nil +} + +// CheckContainerNames check containers' name is valid or not +func CheckContainerNames(names ...string) error { + for _, name := range names { + if err := CheckContainerName(name); err != nil { + return err + } + } + return nil +}