mirror of https://github.com/docker/docs.git
docker kill should return error if container is not running.
Assuming that docker kill is trying to actually kill the container is a mistake. If the container is not running we should report it back to the caller as a error. Docker-DCO-1.1-Signed-off-by: Dan Walsh <dwalsh@redhat.com> (github: rhatdan) Docker-DCO-1.1-Signed-off-by: Regan McCooey <rmccooey27@aol.com> (github: rmccooey27) Docker-DCO-1.1-Signed-off-by: Regan McCooey <rmccooey27@aol.com> (github: rhatdan)
This commit is contained in:
parent
300a12f9aa
commit
c92377e300
|
@ -286,7 +286,7 @@ func (s *Server) postContainersKill(eng *engine.Engine, version version.Version,
|
||||||
name := vars["name"]
|
name := vars["name"]
|
||||||
|
|
||||||
// If we have a signal, look at it. Otherwise, do nothing
|
// If we have a signal, look at it. Otherwise, do nothing
|
||||||
if sigStr := vars["signal"]; sigStr != "" {
|
if sigStr := r.Form.Get("signal"); sigStr != "" {
|
||||||
// Check if we passed the signal as a number:
|
// Check if we passed the signal as a number:
|
||||||
// The largest legal signal is 31, so let's parse on 5 bits
|
// The largest legal signal is 31, so let's parse on 5 bits
|
||||||
sig, err = strconv.ParseUint(sigStr, 10, 5)
|
sig, err = strconv.ParseUint(sigStr, 10, 5)
|
||||||
|
|
|
@ -710,7 +710,7 @@ func (container *Container) KillSig(sig int) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if !container.Running {
|
if !container.Running {
|
||||||
return nil
|
return fmt.Errorf("Container %s is not running", container.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// signal to the monitor that it should not restart the container
|
// signal to the monitor that it should not restart the container
|
||||||
|
|
|
@ -40,6 +40,28 @@ func (s *DockerSuite) TestKillContainer(c *check.C) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *DockerSuite) TestKillofStoppedContainer(c *check.C) {
|
||||||
|
runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "top")
|
||||||
|
out, _, err := runCommandWithOutput(runCmd)
|
||||||
|
if err != nil {
|
||||||
|
c.Fatal(out, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanedContainerID := strings.TrimSpace(out)
|
||||||
|
|
||||||
|
stopCmd := exec.Command(dockerBinary, "stop", cleanedContainerID)
|
||||||
|
if out, _, err = runCommandWithOutput(stopCmd); err != nil {
|
||||||
|
c.Fatalf("failed to stop container: %s, %v", out, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
killCmd := exec.Command(dockerBinary, "kill", "-s", "30", cleanedContainerID)
|
||||||
|
if _, _, err = runCommandWithOutput(killCmd); err == nil {
|
||||||
|
c.Fatalf("kill succeeded on a stopped container")
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteContainer(cleanedContainerID)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *DockerSuite) TestKillDifferentUserContainer(c *check.C) {
|
func (s *DockerSuite) TestKillDifferentUserContainer(c *check.C) {
|
||||||
runCmd := exec.Command(dockerBinary, "run", "-u", "daemon", "-d", "busybox", "top")
|
runCmd := exec.Command(dockerBinary, "run", "-u", "daemon", "-d", "busybox", "top")
|
||||||
out, _, err := runCommandWithOutput(runCmd)
|
out, _, err := runCommandWithOutput(runCmd)
|
||||||
|
|
Loading…
Reference in New Issue