diff --git a/components/engine/daemon/list.go b/components/engine/daemon/list.go index b91e69a7f7..5be864a7cf 100644 --- a/components/engine/daemon/list.go +++ b/components/engine/daemon/list.go @@ -150,9 +150,8 @@ func (daemon *Daemon) foldFilter(config *ContainersConfig) (*listContext, error) if !isValidStateString(value) { return nil, errors.New("Unrecognised filter value for status") } - if value == "exited" || value == "created" { - config.All = true - } + + config.All = true } } diff --git a/components/engine/docs/reference/api/docker_remote_api_v1.22.md b/components/engine/docs/reference/api/docker_remote_api_v1.22.md index fee0842966..fc8e37d634 100644 --- a/components/engine/docs/reference/api/docker_remote_api_v1.22.md +++ b/components/engine/docs/reference/api/docker_remote_api_v1.22.md @@ -114,7 +114,7 @@ Query Parameters: sizes - **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: - `exited=`; -- containers with exit code of `` ; - - `status=`(`created`|`restarting`|`running`|`paused`|`exited`) + - `status=`(`created`|`restarting`|`running`|`paused`|`exited`|`dead`) - `label=key` or `label="key=value"` of a container label - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) diff --git a/components/engine/integration-cli/docker_cli_ps_test.go b/components/engine/integration-cli/docker_cli_ps_test.go index 3c621511a1..906fcea4ef 100644 --- a/components/engine/integration-cli/docker_cli_ps_test.go +++ b/components/engine/integration-cli/docker_cli_ps_test.go @@ -168,14 +168,12 @@ func (s *DockerSuite) TestPsListContainersSize(c *check.C) { func (s *DockerSuite) TestPsListContainersFilterStatus(c *check.C) { testRequires(c, DaemonIsLinux) - // FIXME: this should test paused, but it makes things hang and its wonky - // this is because paused containers can't be controlled by signals // start exited container out, _ := dockerCmd(c, "run", "-d", "busybox") firstID := strings.TrimSpace(out) - // make sure the exited cintainer is not running + // make sure the exited container is not running dockerCmd(c, "wait", firstID) // start running container @@ -183,17 +181,27 @@ func (s *DockerSuite) TestPsListContainersFilterStatus(c *check.C) { secondID := strings.TrimSpace(out) // filter containers by exited - out, _ = dockerCmd(c, "ps", "-q", "--filter=status=exited") + out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter=status=exited") containerOut := strings.TrimSpace(out) - c.Assert(containerOut, checker.Equals, firstID[:12], check.Commentf("Expected id %s, got %s for exited filter, output: %q", firstID[:12], containerOut, out)) + c.Assert(containerOut, checker.Equals, firstID) - out, _ = dockerCmd(c, "ps", "-a", "-q", "--filter=status=running") + out, _ = dockerCmd(c, "ps", "-a", "--no-trunc", "-q", "--filter=status=running") containerOut = strings.TrimSpace(out) - c.Assert(containerOut, checker.Equals, secondID[:12], check.Commentf("Expected id %s, got %s for running filter, output: %q", secondID[:12], containerOut, out)) + c.Assert(containerOut, checker.Equals, secondID) out, _, _ = dockerCmdWithTimeout(time.Second*60, "ps", "-a", "-q", "--filter=status=rubbish") c.Assert(out, checker.Contains, "Unrecognised filter value for status", check.Commentf("Expected error response due to invalid status filter output: %q", out)) + // pause running container + out, _ = dockerCmd(c, "run", "-itd", "busybox") + pausedID := strings.TrimSpace(out) + dockerCmd(c, "pause", pausedID) + // make sure the container is unpaused to let the daemon stop it properly + defer func() { dockerCmd(c, "unpause", pausedID) }() + + out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter=status=paused") + containerOut = strings.TrimSpace(out) + c.Assert(containerOut, checker.Equals, pausedID) } func (s *DockerSuite) TestPsListContainersFilterID(c *check.C) {