diff --git a/api/server/server.go b/api/server/server.go index e1fcc74e8e..342109dd87 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -1037,10 +1037,7 @@ func (s *Server) postContainersStop(version version.Version, w http.ResponseWrit return fmt.Errorf("Missing parameter") } - seconds, err := strconv.Atoi(r.Form.Get("t")) - if err != nil { - return err - } + seconds, _ := strconv.Atoi(r.Form.Get("t")) if err := s.daemon.ContainerStop(vars["name"], seconds); err != nil { if err.Error() == "Container already stopped" { diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go index 11956108ad..9b2ed6b6d1 100644 --- a/integration-cli/docker_api_containers_test.go +++ b/integration-cli/docker_api_containers_test.go @@ -1221,3 +1221,22 @@ func (s *DockerSuite) TestContainersApiChunkedEncoding(c *check.C) { c.Fatalf("got incorrect bind spec, wanted %s, got: %s", expected, binds[0]) } } + +func (s *DockerSuite) TestPostContainerStop(c *check.C) { + runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "top") + out, _, err := runCommandWithOutput(runCmd) + c.Assert(err, check.IsNil) + + containerID := strings.TrimSpace(out) + c.Assert(waitRun(containerID), check.IsNil) + + statusCode, _, err := sockRequest("POST", "/containers/"+containerID+"/stop", nil) + + // 204 No Content is expected, not 200 + c.Assert(statusCode, check.Equals, http.StatusNoContent) + c.Assert(err, check.IsNil) + + if err := waitInspect(containerID, "{{ .State.Running }}", "false", 5); err != nil { + c.Fatal(err) + } +}