diff --git a/cli/command/container/restart.go b/cli/command/container/restart.go index 7ac5751802..b86b822e1c 100644 --- a/cli/command/container/restart.go +++ b/cli/command/container/restart.go @@ -14,8 +14,9 @@ import ( ) type restartOptions struct { - nSeconds int - nSecondsChanged bool + signal string + timeout int + timeoutChanged bool containers []string } @@ -30,14 +31,15 @@ func NewRestartCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args - opts.nSecondsChanged = cmd.Flags().Changed("time") + opts.timeoutChanged = cmd.Flags().Changed("time") return runRestart(dockerCli, &opts) }, ValidArgsFunction: completion.ContainerNames(dockerCli, true), } flags := cmd.Flags() - flags.IntVarP(&opts.nSeconds, "time", "t", 10, "Seconds to wait for stop before killing the container") + flags.StringVarP(&opts.signal, "signal", "s", "", "Signal to send to the container") + flags.IntVarP(&opts.timeout, "time", "t", 0, "Seconds to wait before killing the container") return cmd } @@ -45,11 +47,12 @@ func runRestart(dockerCli command.Cli, opts *restartOptions) error { ctx := context.Background() var errs []string var timeout *int - if opts.nSecondsChanged { - timeout = &opts.nSeconds + if opts.timeoutChanged { + timeout = &opts.timeout } for _, name := range opts.containers { err := dockerCli.Client().ContainerRestart(ctx, name, container.StopOptions{ + Signal: opts.signal, Timeout: timeout, }) if err != nil { diff --git a/cli/command/container/stop.go b/cli/command/container/stop.go index bcceb81351..e5664617b1 100644 --- a/cli/command/container/stop.go +++ b/cli/command/container/stop.go @@ -14,8 +14,9 @@ import ( ) type stopOptions struct { - time int - timeChanged bool + signal string + timeout int + timeoutChanged bool containers []string } @@ -30,25 +31,27 @@ func NewStopCommand(dockerCli command.Cli) *cobra.Command { Args: cli.RequiresMinArgs(1), RunE: func(cmd *cobra.Command, args []string) error { opts.containers = args - opts.timeChanged = cmd.Flags().Changed("time") + opts.timeoutChanged = cmd.Flags().Changed("time") return runStop(dockerCli, &opts) }, ValidArgsFunction: completion.ContainerNames(dockerCli, false), } flags := cmd.Flags() - flags.IntVarP(&opts.time, "time", "t", 10, "Seconds to wait for stop before killing it") + flags.StringVarP(&opts.signal, "signal", "s", "", "Signal to send to the container") + flags.IntVarP(&opts.timeout, "time", "t", 0, "Seconds to wait before killing the container") return cmd } func runStop(dockerCli command.Cli, opts *stopOptions) error { var timeout *int - if opts.timeChanged { - timeout = &opts.time + if opts.timeoutChanged { + timeout = &opts.timeout } errChan := parallelOperation(context.Background(), opts.containers, func(ctx context.Context, id string) error { return dockerCli.Client().ContainerStop(ctx, id, container.StopOptions{ + Signal: opts.signal, Timeout: timeout, }) }) diff --git a/docs/reference/commandline/restart.md b/docs/reference/commandline/restart.md index aa64257d86..30cd15812b 100644 --- a/docs/reference/commandline/restart.md +++ b/docs/reference/commandline/restart.md @@ -12,8 +12,8 @@ Usage: docker restart [OPTIONS] CONTAINER [CONTAINER...] Restart one or more containers Options: - --help Print usage - -t, --time int Seconds to wait for stop before killing the container (default 10) + -s, --signal string Signal to send to the container + -t, --time int Seconds to wait before killing the container ``` ## Examples diff --git a/docs/reference/commandline/stop.md b/docs/reference/commandline/stop.md index fdc7d0ae72..04df574a03 100644 --- a/docs/reference/commandline/stop.md +++ b/docs/reference/commandline/stop.md @@ -12,8 +12,8 @@ Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] Stop one or more running containers Options: - --help Print usage - -t, --time int Seconds to wait for stop before killing it (default 10) + -s, --signal string Signal to send to the container + -t, --time int Seconds to wait before killing the container ``` ## Description