Revert "Disable automatic killing of containers when docker stop fails"

This reverts commit 8b5cf51d60.

Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
This commit is contained in:
Michael Crosby 2014-03-24 12:03:56 +00:00
Родитель f1bd79ec97
Коммит d503714285
4 изменённых файлов: 18 добавлений и 10 удалений

Просмотреть файл

@ -498,8 +498,8 @@ func (cli *DockerCli) CmdInfo(args ...string) error {
} }
func (cli *DockerCli) CmdStop(args ...string) error { func (cli *DockerCli) CmdStop(args ...string) error {
cmd := cli.Subcmd("stop", "[OPTIONS] CONTAINER [CONTAINER...]", "Stop a running container (Send SIGTERM)") cmd := cli.Subcmd("stop", "[OPTIONS] CONTAINER [CONTAINER...]", "Stop a running container (Send SIGTERM, and then SIGKILL after grace period)")
nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Number of seconds to wait for the container to stop.") nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Number of seconds to wait for the container to stop before killing it.")
if err := cmd.Parse(args); err != nil { if err := cmd.Parse(args); err != nil {
return nil return nil
} }
@ -526,7 +526,7 @@ func (cli *DockerCli) CmdStop(args ...string) error {
func (cli *DockerCli) CmdRestart(args ...string) error { func (cli *DockerCli) CmdRestart(args ...string) error {
cmd := cli.Subcmd("restart", "[OPTIONS] CONTAINER [CONTAINER...]", "Restart a running container") cmd := cli.Subcmd("restart", "[OPTIONS] CONTAINER [CONTAINER...]", "Restart a running container")
nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Number of seconds to wait for the container to stop. Default=10") nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Number of seconds to try to stop for before killing the container. Once killed it will then be restarted. Default=10")
if err := cmd.Parse(args); err != nil { if err := cmd.Parse(args); err != nil {
return nil return nil
} }

Просмотреть файл

@ -432,7 +432,7 @@ Stop a container
HTTP/1.1 204 OK HTTP/1.1 204 OK
:query t: number of seconds to wait for the container to stop :query t: number of seconds to wait before killing the container
:statuscode 204: no error :statuscode 204: no error
:statuscode 404: no such container :statuscode 404: no such container
:statuscode 500: server error :statuscode 500: server error
@ -457,7 +457,7 @@ Restart a container
HTTP/1.1 204 OK HTTP/1.1 204 OK
:query t: number of seconds to wait for the container to stop :query t: number of seconds to wait before killing the container
:statuscode 204: no error :statuscode 204: no error
:statuscode 404: no such container :statuscode 404: no such container
:statuscode 500: server error :statuscode 500: server error

Просмотреть файл

@ -1360,11 +1360,11 @@ This example shows 5 containers that might be set up to test a web application c
Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...] Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
Stop a running container (Send SIGTERM) Stop a running container (Send SIGTERM, and then SIGKILL after grace period)
-t, --time=10: Number of seconds to wait for the container to stop. -t, --time=10: Number of seconds to wait for the container to stop before killing it.
The main process inside the container will receive SIGTERM. The main process inside the container will receive SIGTERM, and after a grace period, SIGKILL
.. _cli_tag: .. _cli_tag:

Просмотреть файл

@ -903,12 +903,20 @@ func (container *Container) Stop(seconds int) error {
// 1. Send a SIGTERM // 1. Send a SIGTERM
if err := container.KillSig(15); err != nil { if err := container.KillSig(15); err != nil {
return err utils.Debugf("Error sending kill SIGTERM: %s", err)
log.Print("Failed to send SIGTERM to the process, force killing")
if err := container.KillSig(9); err != nil {
return err
}
} }
// 2. Wait for the process to exit on its own // 2. Wait for the process to exit on its own
if err := container.WaitTimeout(time.Duration(seconds) * time.Second); err != nil { if err := container.WaitTimeout(time.Duration(seconds) * time.Second); err != nil {
return err log.Printf("Container %v failed to exit within %d seconds of SIGTERM - using the force", container.ID, seconds)
// 3. If it doesn't, then send SIGKILL
if err := container.Kill(); err != nil {
return err
}
} }
return nil return nil
} }