Bläddra i källkod

Merge pull request #17908 from calavera/carry_17059

[Carry 17059] allow filtering containers by any status
Alexander Morozov 9 år sedan
förälder
incheckning
37f64ded44
3 ändrade filer med 18 tillägg och 11 borttagningar
  1. 2 3
      daemon/list.go
  2. 1 1
      docs/reference/api/docker_remote_api_v1.22.md
  3. 15 7
      integration-cli/docker_cli_ps_test.go

+ 2 - 3
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
 		}
 	}
 

+ 1 - 1
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=<int>`; -- containers with exit code of  `<int>` ;
-  -   `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)
 

+ 15 - 7
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) {