浏览代码

`docker ps --filter exited=status` should not show running containers

Docker-DCO-1.1-Signed-off-by: Jessica Frazelle <jess@docker.com> (github: jfrazelle)
Jessica Frazelle 10 年之前
父节点
当前提交
81f84023be
共有 2 个文件被更改,包括 15 次插入14 次删除
  1. 2 3
      daemon/list.go
  2. 13 11
      integration-cli/docker_cli_ps_test.go

+ 2 - 3
daemon/list.go

@@ -73,7 +73,6 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status {
 		if !container.Running && !all && n <= 0 && since == "" && before == "" {
 			return nil
 		}
-
 		if !psFilters.Match("name", container.Name) {
 			return nil
 		}
@@ -96,10 +95,10 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status {
 				return errLast
 			}
 		}
-		if len(filt_exited) > 0 && !container.Running {
+		if len(filt_exited) > 0 {
 			should_skip := true
 			for _, code := range filt_exited {
-				if code == container.ExitCode {
+				if code == container.ExitCode && !container.Running {
 					should_skip = false
 					break
 				}

+ 13 - 11
integration-cli/docker_cli_ps_test.go

@@ -398,11 +398,15 @@ func TestPsListContainersFilterName(t *testing.T) {
 }
 
 func TestPsListContainersFilterExited(t *testing.T) {
-	deleteAllContainers()
 	defer deleteAllContainers()
-	runCmd := exec.Command(dockerBinary, "run", "--name", "zero1", "busybox", "true")
-	out, _, err := runCommandWithOutput(runCmd)
-	if err != nil {
+
+	runCmd := exec.Command(dockerBinary, "run", "-d", "--name", "top", "busybox", "top")
+	if out, _, err := runCommandWithOutput(runCmd); err != nil {
+		t.Fatal(out, err)
+	}
+
+	runCmd = exec.Command(dockerBinary, "run", "--name", "zero1", "busybox", "true")
+	if out, _, err := runCommandWithOutput(runCmd); err != nil {
 		t.Fatal(out, err)
 	}
 	firstZero, err := getIDByName("zero1")
@@ -411,8 +415,7 @@ func TestPsListContainersFilterExited(t *testing.T) {
 	}
 
 	runCmd = exec.Command(dockerBinary, "run", "--name", "zero2", "busybox", "true")
-	out, _, err = runCommandWithOutput(runCmd)
-	if err != nil {
+	if out, _, err := runCommandWithOutput(runCmd); err != nil {
 		t.Fatal(out, err)
 	}
 	secondZero, err := getIDByName("zero2")
@@ -421,8 +424,7 @@ func TestPsListContainersFilterExited(t *testing.T) {
 	}
 
 	runCmd = exec.Command(dockerBinary, "run", "--name", "nonzero1", "busybox", "false")
-	out, _, err = runCommandWithOutput(runCmd)
-	if err == nil {
+	if out, _, err := runCommandWithOutput(runCmd); err == nil {
 		t.Fatal("Should fail.", out, err)
 	}
 	firstNonZero, err := getIDByName("nonzero1")
@@ -431,8 +433,7 @@ func TestPsListContainersFilterExited(t *testing.T) {
 	}
 
 	runCmd = exec.Command(dockerBinary, "run", "--name", "nonzero2", "busybox", "false")
-	out, _, err = runCommandWithOutput(runCmd)
-	if err == nil {
+	if out, _, err := runCommandWithOutput(runCmd); err == nil {
 		t.Fatal("Should fail.", out, err)
 	}
 	secondNonZero, err := getIDByName("nonzero2")
@@ -442,7 +443,7 @@ func TestPsListContainersFilterExited(t *testing.T) {
 
 	// filter containers by exited=0
 	runCmd = exec.Command(dockerBinary, "ps", "-a", "-q", "--no-trunc", "--filter=exited=0")
-	out, _, err = runCommandWithOutput(runCmd)
+	out, _, err := runCommandWithOutput(runCmd)
 	if err != nil {
 		t.Fatal(out, err)
 	}
@@ -472,5 +473,6 @@ func TestPsListContainersFilterExited(t *testing.T) {
 	if ids[1] != firstNonZero {
 		t.Fatalf("Second in list should be %q, got %q", firstNonZero, ids[1])
 	}
+
 	logDone("ps - test ps filter exited")
 }