From 86c30e6a0d153c2a99d9d12385179b22e8b7b935 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Fri, 18 Feb 2022 12:25:17 +0100 Subject: [PATCH] add --signal option to stop and restart Wording and documentation still need to be updated, but will do so in a follow-up. Also removing the default "10 seconds" from the timeout flags, as this default is not actually used, and may not match the actual default (which is defined on the daemon side). Signed-off-by: Sebastiaan van Stijn --- cli/command/container/restart.go | 15 +++++++++------ cli/command/container/stop.go | 15 +++++++++------ docs/reference/commandline/restart.md | 4 ++-- docs/reference/commandline/stop.md | 4 ++-- 4 files changed, 22 insertions(+), 16 deletions(-) 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