diff --git a/daemon/list.go b/daemon/list.go index 19f806ce43..aedc4c10a5 100644 --- a/daemon/list.go +++ b/daemon/list.go @@ -551,23 +551,19 @@ func includeContainerInList(container *container.Snapshot, ctx *listContext) ite } } - if len(ctx.publish) > 0 { - shouldSkip := true - for port := range ctx.publish { - if _, ok := container.PortBindings[port]; ok { + if len(ctx.expose) > 0 || len(ctx.publish) > 0 { + var ( + shouldSkip bool = true + publishedPort nat.Port + exposedPort nat.Port + ) + for _, port := range container.Ports { + publishedPort = nat.Port(fmt.Sprintf("%d/%s", port.PublicPort, port.Type)) + exposedPort = nat.Port(fmt.Sprintf("%d/%s", port.PrivatePort, port.Type)) + if ok := ctx.publish[publishedPort]; ok { shouldSkip = false break - } - } - if shouldSkip { - return excludeContainer - } - } - - if len(ctx.expose) > 0 { - shouldSkip := true - for port := range ctx.expose { - if _, ok := container.ExposedPorts[port]; ok { + } else if ok := ctx.expose[exposedPort]; ok { shouldSkip = false break } diff --git a/integration-cli/docker_cli_ps_test.go b/integration-cli/docker_cli_ps_test.go index a7a3e0e47c..ee0a67867a 100644 --- a/integration-cli/docker_cli_ps_test.go +++ b/integration-cli/docker_cli_ps_test.go @@ -816,29 +816,44 @@ func (s *DockerSuite) TestPsListContainersFilterPorts(c *testing.T) { out, _ = dockerCmd(c, "run", "-d", "--expose=8080", "busybox", "top") id2 := strings.TrimSpace(out) + out, _ = dockerCmd(c, "run", "-d", "-p", "1090:90", "busybox", "top") + id3 := strings.TrimSpace(out) + out, _ = dockerCmd(c, "ps", "--no-trunc", "-q") assert.Assert(c, strings.Contains(strings.TrimSpace(out), id1)) assert.Assert(c, strings.Contains(strings.TrimSpace(out), id2)) + assert.Assert(c, strings.Contains(strings.TrimSpace(out), id3)) + out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter", "publish=80-8080/udp") assert.Assert(c, strings.TrimSpace(out) != id1) assert.Assert(c, strings.TrimSpace(out) != id2) + assert.Assert(c, strings.TrimSpace(out) != id3) out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter", "expose=8081") assert.Assert(c, strings.TrimSpace(out) != id1) assert.Assert(c, strings.TrimSpace(out) != id2) + assert.Assert(c, strings.TrimSpace(out) != id3) out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter", "publish=80-81") - assert.Equal(c, strings.TrimSpace(out), id1) + assert.Assert(c, strings.TrimSpace(out) != id1) assert.Assert(c, strings.TrimSpace(out) != id2) + assert.Assert(c, strings.TrimSpace(out) != id3) out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter", "expose=80/tcp") assert.Equal(c, strings.TrimSpace(out), id1) assert.Assert(c, strings.TrimSpace(out) != id2) + assert.Assert(c, strings.TrimSpace(out) != id3) + + out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter", "publish=1090") + assert.Assert(c, strings.TrimSpace(out) != id1) + assert.Assert(c, strings.TrimSpace(out) != id2) + assert.Equal(c, strings.TrimSpace(out), id3) out, _ = dockerCmd(c, "ps", "--no-trunc", "-q", "--filter", "expose=8080/tcp") out = RemoveOutputForExistingElements(out, existingContainers) assert.Assert(c, strings.TrimSpace(out) != id1) assert.Equal(c, strings.TrimSpace(out), id2) + assert.Assert(c, strings.TrimSpace(out) != id3) } func (s *DockerSuite) TestPsNotShowLinknamesOfDeletedContainer(c *testing.T) {