瀏覽代碼

Add Networks placeholder to ps --format

Passing {{.Networks}} to the format parameter will prompt ps to
display all the networks the container is connected to.

Signed-off-by: Kenfe-Mickael Laventure <mickael.laventure@gmail.com>
Kenfe-Mickael Laventure 8 年之前
父節點
當前提交
a43d9bb9c3

+ 7 - 0
cli/command/container/list.go

@@ -70,6 +70,13 @@ func (p *preProcessor) Size() bool {
 	return true
 }
 
+// Networks does nothing but return true.
+// It is needed to avoid the template check to fail as this field
+// doesn't exist in `types.Container`
+func (p *preProcessor) Networks() bool {
+	return true
+}
+
 func buildContainerListOptions(opts *psOptions) (*types.ContainerListOptions, error) {
 	options := &types.ContainerListOptions{
 		All:    opts.all,

+ 16 - 0
cli/command/formatter/container.go

@@ -24,6 +24,7 @@ const (
 	portsHeader       = "PORTS"
 	mountsHeader      = "MOUNTS"
 	localVolumes      = "LOCAL VOLUMES"
+	networksHeader    = "NETWORKS"
 )
 
 // NewContainerFormat returns a Format for rendering using a Context
@@ -217,3 +218,18 @@ func (c *containerContext) LocalVolumes() string {
 
 	return fmt.Sprintf("%d", count)
 }
+
+func (c *containerContext) Networks() string {
+	c.AddHeader(networksHeader)
+
+	if c.c.NetworkSettings == nil {
+		return ""
+	}
+
+	networks := []string{}
+	for k := range c.c.NetworkSettings.Networks {
+		networks = append(networks, k)
+	}
+
+	return strings.Join(networks, ",")
+}

+ 2 - 2
cli/command/formatter/container_test.go

@@ -333,8 +333,8 @@ func TestContainerContextWriteJSON(t *testing.T) {
 	}
 	expectedCreated := time.Unix(unix, 0).String()
 	expectedJSONs := []map[string]interface{}{
-		{"Command": "\"\"", "CreatedAt": expectedCreated, "ID": "containerID1", "Image": "ubuntu", "Labels": "", "LocalVolumes": "0", "Mounts": "", "Names": "foobar_baz", "Ports": "", "RunningFor": "About a minute", "Size": "0 B", "Status": ""},
-		{"Command": "\"\"", "CreatedAt": expectedCreated, "ID": "containerID2", "Image": "ubuntu", "Labels": "", "LocalVolumes": "0", "Mounts": "", "Names": "foobar_bar", "Ports": "", "RunningFor": "About a minute", "Size": "0 B", "Status": ""},
+		{"Command": "\"\"", "CreatedAt": expectedCreated, "ID": "containerID1", "Image": "ubuntu", "Labels": "", "LocalVolumes": "0", "Mounts": "", "Names": "foobar_baz", "Networks": "", "Ports": "", "RunningFor": "About a minute", "Size": "0 B", "Status": ""},
+		{"Command": "\"\"", "CreatedAt": expectedCreated, "ID": "containerID2", "Image": "ubuntu", "Labels": "", "LocalVolumes": "0", "Mounts": "", "Names": "foobar_bar", "Networks": "", "Ports": "", "RunningFor": "About a minute", "Size": "0 B", "Status": ""},
 	}
 	out := bytes.NewBufferString("")
 	err := ContainerWrite(Context{Format: "{{json .}}", Output: out}, containers)

+ 1 - 0
docs/reference/commandline/ps.md

@@ -335,6 +335,7 @@ Placeholder   | Description
 `.Labels`     | All labels assigned to the container.
 `.Label`      | Value of a specific label for this container. For example `'{{.Label "com.docker.swarm.cpu"}}'`
 `.Mounts`     | Names of the volumes mounted in this container.
+`.Networks`   | Names of the networks attached to this container.
 
 When using the `--format` option, the `ps` command will either output the data
 exactly as the template declares or, when using the `table` directive, includes