diff --git a/components/engine/daemon/list.go b/components/engine/daemon/list.go index 0f3a88e902..5197d9986c 100644 --- a/components/engine/daemon/list.go +++ b/components/engine/daemon/list.go @@ -81,7 +81,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 } @@ -104,10 +103,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 } diff --git a/components/engine/integration-cli/docker_cli_ps_test.go b/components/engine/integration-cli/docker_cli_ps_test.go index 17a7280b0a..fc22bc7d7e 100644 --- a/components/engine/integration-cli/docker_cli_ps_test.go +++ b/components/engine/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") }