Ver Fonte

Merge pull request #14919 from tianon/empty-ps-headers

Fix "docker ps" with no containers regression
David Calavera há 10 anos atrás
pai
commit
cd9dd55233
2 ficheiros alterados com 22 adições e 0 exclusões
  1. 7 0
      api/client/ps/custom.go
  2. 15 0
      integration-cli/docker_cli_ps_test.go

+ 7 - 0
api/client/ps/custom.go

@@ -191,6 +191,13 @@ func customFormat(ctx Context, containers []types.Container) {
 	}
 
 	if table {
+		if len(header) == 0 {
+			// if we still don't have a header, we didn't have any containers so we need to fake it to get the right headers from the template
+			containerCtx := &containerContext{}
+			tmpl.Execute(bytes.NewBufferString(""), containerCtx)
+			header = containerCtx.fullHeader()
+		}
+
 		t := tabwriter.NewWriter(ctx.Output, 20, 1, 3, ' ', 0)
 		t.Write([]byte(header))
 		t.Write([]byte("\n"))

+ 15 - 0
integration-cli/docker_cli_ps_test.go

@@ -539,3 +539,18 @@ func (s *DockerSuite) TestPsFormatMultiNames(c *check.C) {
 	}
 
 }
+
+func (s *DockerSuite) TestPsFormatHeaders(c *check.C) {
+	// make sure no-container "docker ps" still prints the header row
+	out, _ := dockerCmd(c, "ps", "--format", "table {{.ID}}")
+	if out != "CONTAINER ID\n" {
+		c.Fatalf(`Expected 'CONTAINER ID\n', got %v`, out)
+	}
+
+	// verify that "docker ps" with a container still prints the header row also
+	dockerCmd(c, "run", "--name=test", "-d", "busybox", "top")
+	out, _ = dockerCmd(c, "ps", "--format", "table {{.Names}}")
+	if out != "NAMES\ntest\n" {
+		c.Fatalf(`Expected 'NAMES\ntest\n', got %v`, out)
+	}
+}