2015-03-24 23:57:23 -04:00
package client
import (
"fmt"
2015-05-05 00:18:28 -04:00
Cli "github.com/docker/docker/cli"
2015-03-24 23:57:23 -04:00
flag "github.com/docker/docker/pkg/mflag"
)
2015-10-03 11:56:41 -04:00
// CmdStop stops one or more containers.
2015-03-25 13:34:41 -04:00
//
// A running container is stopped by first sending SIGTERM and then SIGKILL if the container fails to stop within a grace period (the default is 10 seconds).
//
// Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
2015-03-24 23:57:23 -04:00
func ( cli * DockerCli ) CmdStop ( args ... string ) error {
2015-10-08 08:46:21 -04:00
cmd := Cli . Subcmd ( "stop" , [ ] string { "CONTAINER [CONTAINER...]" } , Cli . DockerCommands [ "stop" ] . Description + ".\nSending SIGTERM and then SIGKILL after a grace period" , true )
2015-03-24 23:57:23 -04:00
nSeconds := cmd . Int ( [ ] string { "t" , "-time" } , 10 , "Seconds to wait for stop before killing it" )
cmd . Require ( flag . Min , 1 )
2015-03-28 21:22:46 -04:00
cmd . ParseFlags ( args , true )
2015-03-24 23:57:23 -04:00
2015-05-05 03:59:17 -04:00
var errNames [ ] string
2015-03-24 23:57:23 -04:00
for _ , name := range cmd . Args ( ) {
2015-12-04 13:38:31 -05:00
if err := cli . client . ContainerStop ( name , * nSeconds ) ; err != nil {
2015-03-24 23:57:23 -04:00
fmt . Fprintf ( cli . err , "%s\n" , err )
2015-05-05 03:59:17 -04:00
errNames = append ( errNames , name )
2015-03-24 23:57:23 -04:00
} else {
fmt . Fprintf ( cli . out , "%s\n" , name )
}
}
2015-05-05 03:59:17 -04:00
if len ( errNames ) > 0 {
return fmt . Errorf ( "Error: failed to stop containers: %v" , errNames )
}
return nil
2015-03-24 23:57:23 -04:00
}