mirror of https://github.com/docker/cli.git
Merge pull request #3614 from thaJeztah/signal_options
add --signal option to stop and restart
This commit is contained in:
commit
b655203b06
|
@ -14,8 +14,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type restartOptions struct {
|
type restartOptions struct {
|
||||||
nSeconds int
|
signal string
|
||||||
nSecondsChanged bool
|
timeout int
|
||||||
|
timeoutChanged bool
|
||||||
|
|
||||||
containers []string
|
containers []string
|
||||||
}
|
}
|
||||||
|
@ -30,14 +31,15 @@ func NewRestartCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
Args: cli.RequiresMinArgs(1),
|
Args: cli.RequiresMinArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
opts.containers = args
|
opts.containers = args
|
||||||
opts.nSecondsChanged = cmd.Flags().Changed("time")
|
opts.timeoutChanged = cmd.Flags().Changed("time")
|
||||||
return runRestart(dockerCli, &opts)
|
return runRestart(dockerCli, &opts)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.ContainerNames(dockerCli, true),
|
ValidArgsFunction: completion.ContainerNames(dockerCli, true),
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
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
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,11 +47,12 @@ func runRestart(dockerCli command.Cli, opts *restartOptions) error {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
var errs []string
|
var errs []string
|
||||||
var timeout *int
|
var timeout *int
|
||||||
if opts.nSecondsChanged {
|
if opts.timeoutChanged {
|
||||||
timeout = &opts.nSeconds
|
timeout = &opts.timeout
|
||||||
}
|
}
|
||||||
for _, name := range opts.containers {
|
for _, name := range opts.containers {
|
||||||
err := dockerCli.Client().ContainerRestart(ctx, name, container.StopOptions{
|
err := dockerCli.Client().ContainerRestart(ctx, name, container.StopOptions{
|
||||||
|
Signal: opts.signal,
|
||||||
Timeout: timeout,
|
Timeout: timeout,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -14,8 +14,9 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type stopOptions struct {
|
type stopOptions struct {
|
||||||
time int
|
signal string
|
||||||
timeChanged bool
|
timeout int
|
||||||
|
timeoutChanged bool
|
||||||
|
|
||||||
containers []string
|
containers []string
|
||||||
}
|
}
|
||||||
|
@ -30,25 +31,27 @@ func NewStopCommand(dockerCli command.Cli) *cobra.Command {
|
||||||
Args: cli.RequiresMinArgs(1),
|
Args: cli.RequiresMinArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
opts.containers = args
|
opts.containers = args
|
||||||
opts.timeChanged = cmd.Flags().Changed("time")
|
opts.timeoutChanged = cmd.Flags().Changed("time")
|
||||||
return runStop(dockerCli, &opts)
|
return runStop(dockerCli, &opts)
|
||||||
},
|
},
|
||||||
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
|
ValidArgsFunction: completion.ContainerNames(dockerCli, false),
|
||||||
}
|
}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
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
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func runStop(dockerCli command.Cli, opts *stopOptions) error {
|
func runStop(dockerCli command.Cli, opts *stopOptions) error {
|
||||||
var timeout *int
|
var timeout *int
|
||||||
if opts.timeChanged {
|
if opts.timeoutChanged {
|
||||||
timeout = &opts.time
|
timeout = &opts.timeout
|
||||||
}
|
}
|
||||||
|
|
||||||
errChan := parallelOperation(context.Background(), opts.containers, func(ctx context.Context, id string) error {
|
errChan := parallelOperation(context.Background(), opts.containers, func(ctx context.Context, id string) error {
|
||||||
return dockerCli.Client().ContainerStop(ctx, id, container.StopOptions{
|
return dockerCli.Client().ContainerStop(ctx, id, container.StopOptions{
|
||||||
|
Signal: opts.signal,
|
||||||
Timeout: timeout,
|
Timeout: timeout,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -12,8 +12,8 @@ Usage: docker restart [OPTIONS] CONTAINER [CONTAINER...]
|
||||||
Restart one or more containers
|
Restart one or more containers
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--help Print usage
|
-s, --signal string Signal to send to the container
|
||||||
-t, --time int Seconds to wait for stop before killing the container (default 10)
|
-t, --time int Seconds to wait before killing the container
|
||||||
```
|
```
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
|
@ -12,8 +12,8 @@ Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
|
||||||
Stop one or more running containers
|
Stop one or more running containers
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--help Print usage
|
-s, --signal string Signal to send to the container
|
||||||
-t, --time int Seconds to wait for stop before killing it (default 10)
|
-t, --time int Seconds to wait before killing the container
|
||||||
```
|
```
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
Loading…
Reference in New Issue