Browse code

Add godoc-style docstrings to Cmd... methods

Signed-off-by: Peggy Li <peggyli.224@gmail.com>

Peggy Li authored on 2015/03/26 02:34:41
Showing 41 changed files
... ...
@@ -12,6 +12,9 @@ import (
12 12
 	"github.com/docker/docker/utils"
13 13
 )
14 14
 
15
+// CmdAttach attaches to a running container.
16
+//
17
+// Usage: docker attach [OPTIONS] CONTAINER
15 18
 func (cli *DockerCli) CmdAttach(args ...string) error {
16 19
 	var (
17 20
 		cmd     = cli.Subcmd("attach", "CONTAINER", "Attach to a running container", true)
... ...
@@ -36,6 +36,11 @@ const (
36 36
 	tarHeaderSize = 512
37 37
 )
38 38
 
39
+// CmdBuild builds a new image from the source code at a given path.
40
+//
41
+// If '-' is provided instead of a path or URL, Docker will build an image from either a Dockerfile or tar archive read from STDIN.
42
+//
43
+// Usage: docker build [OPTIONS] PATH | URL | -
39 44
 func (cli *DockerCli) CmdBuild(args ...string) error {
40 45
 	cmd := cli.Subcmd("build", "PATH | URL | -", "Build a new image from the source code at PATH", true)
41 46
 	tag := cmd.String([]string{"t", "-tag"}, "", "Repository name (and optionally a tag) for the image")
... ...
@@ -64,7 +64,7 @@ func (cli *DockerCli) getMethod(args ...string) (func(...string) error, bool) {
64 64
 	return method.Interface().(func(...string) error), true
65 65
 }
66 66
 
67
-// Cmd executes the specified command
67
+// Cmd executes the specified command.
68 68
 func (cli *DockerCli) Cmd(args ...string) error {
69 69
 	if len(args) > 1 {
70 70
 		method, exists := cli.getMethod(args[:2]...)
71 71
new file mode 100644
... ...
@@ -0,0 +1,5 @@
0
+// Package client provides a command-line interface for Docker.
1
+//
2
+// Run "docker help SUBCOMMAND" or "docker SUBCOMMAND --help" to see more information on any Docker subcommand, including the full list of options supported for the subcommand.
3
+// See https://docs.docker.com/installation/ for instructions on installing Docker.
4
+package client
... ...
@@ -14,6 +14,9 @@ import (
14 14
 	"github.com/docker/docker/utils"
15 15
 )
16 16
 
17
+// CmdAttach attaches to a running container.
18
+//
19
+// Usage: docker attach [OPTIONS] CONTAINER
17 20
 func (cli *DockerCli) CmdCommit(args ...string) error {
18 21
 	cmd := cli.Subcmd("commit", "CONTAINER [REPOSITORY[:TAG]]", "Create a new image from a container's changes", true)
19 22
 	flPause := cmd.Bool([]string{"p", "-pause"}, true, "Pause container during commit")
... ...
@@ -11,6 +11,11 @@ import (
11 11
 	"github.com/docker/docker/utils"
12 12
 )
13 13
 
14
+// CmdCp copies files/folders from a path on the container to a directory on the host running the command.
15
+//
16
+// If HOSTDIR is '-', the data is written as a tar file to STDOUT.
17
+//
18
+// Usage: docker cp CONTAINER:PATH HOSTDIR
14 19
 func (cli *DockerCli) CmdCp(args ...string) error {
15 20
 	cmd := cli.Subcmd("cp", "CONTAINER:PATH HOSTDIR|-", "Copy files/folders from a PATH on the container to a HOSTDIR on the host\nrunning the command. Use '-' to write the data\nas a tar file to STDOUT.", true)
16 21
 	cmd.Require(flag.Exact, 2)
... ...
@@ -128,6 +128,9 @@ func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runc
128 128
 	return &response, nil
129 129
 }
130 130
 
131
+// CmdCreate creates a new container from a given image.
132
+//
133
+// Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
131 134
 func (cli *DockerCli) CmdCreate(args ...string) error {
132 135
 	cmd := cli.Subcmd("create", "IMAGE [COMMAND] [ARG...]", "Create a new container", true)
133 136
 
... ...
@@ -9,6 +9,11 @@ import (
9 9
 	"github.com/docker/docker/utils"
10 10
 )
11 11
 
12
+// CmdDiff shows changes on a container's filesystem.
13
+//
14
+// Each changed file is printed on a separate line, prefixed with a single character that indicates the status of the file: C (modified), A (added), or D (deleted).
15
+//
16
+// Usage: docker diff CONTAINER
12 17
 func (cli *DockerCli) CmdDiff(args ...string) error {
13 18
 	cmd := cli.Subcmd("diff", "CONTAINER", "Inspect changes on a container's filesystem", true)
14 19
 	cmd.Require(flag.Exact, 1)
... ...
@@ -12,6 +12,9 @@ import (
12 12
 	"github.com/docker/docker/utils"
13 13
 )
14 14
 
15
+// CmdEvents prints a live stream of real time events from the server.
16
+//
17
+// Usage: docker events [OPTIONS]
15 18
 func (cli *DockerCli) CmdEvents(args ...string) error {
16 19
 	cmd := cli.Subcmd("events", "", "Get real time events from the server", true)
17 20
 	since := cmd.String([]string{"#since", "-since"}, "", "Show all events created since timestamp")
... ...
@@ -12,6 +12,9 @@ import (
12 12
 	"github.com/docker/docker/utils"
13 13
 )
14 14
 
15
+// CmdExec runs a command in a running container.
16
+//
17
+// Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
15 18
 func (cli *DockerCli) CmdExec(args ...string) error {
16 19
 	cmd := cli.Subcmd("exec", "CONTAINER COMMAND [ARG...]", "Run a command in a running container", true)
17 20
 
... ...
@@ -10,6 +10,11 @@ import (
10 10
 	"github.com/docker/docker/utils"
11 11
 )
12 12
 
13
+// CmdExport exports a filesystem as a tar archive.
14
+//
15
+// The tar archive is streamed to STDOUT by default or written to a file.
16
+//
17
+// Usage: docker export [OPTIONS] CONTAINER
13 18
 func (cli *DockerCli) CmdExport(args ...string) error {
14 19
 	cmd := cli.Subcmd("export", "CONTAINER", "Export a filesystem as a tar archive (streamed to STDOUT by default)", true)
15 20
 	outfile := cmd.String([]string{"o", "-output"}, "", "Write to a file, instead of STDOUT")
... ...
@@ -7,6 +7,11 @@ import (
7 7
 	flag "github.com/docker/docker/pkg/mflag"
8 8
 )
9 9
 
10
+// CmdHelp displays information on a Docker command.
11
+//
12
+//If more than one command is specified, information is only shown for the first command.
13
+//
14
+// Usage: docker help COMMAND or docker COMMAND --help
10 15
 func (cli *DockerCli) CmdHelp(args ...string) error {
11 16
 	if len(args) > 1 {
12 17
 		method, exists := cli.getMethod(args[:2]...)
... ...
@@ -12,6 +12,9 @@ import (
12 12
 	"github.com/docker/docker/utils"
13 13
 )
14 14
 
15
+// CmdHistory shows the history of an image.
16
+//
17
+// Usage: docker history [OPTIONS] IMAGE
15 18
 func (cli *DockerCli) CmdHistory(args ...string) error {
16 19
 	cmd := cli.Subcmd("history", "IMAGE", "Show the history of an image", true)
17 20
 	quiet := cmd.Bool([]string{"q", "-quiet"}, false, "Only show numeric IDs")
... ...
@@ -85,6 +85,9 @@ func (cli *DockerCli) printTreeNode(noTrunc bool, image *engine.Env, prefix stri
85 85
 	}
86 86
 }
87 87
 
88
+// CmdImages lists the images in a specified repository, or all top-level images if no repository is specified.
89
+//
90
+// Usage: docker images [OPTIONS] [REPOSITORY]
88 91
 func (cli *DockerCli) CmdImages(args ...string) error {
89 92
 	cmd := cli.Subcmd("images", "[REPOSITORY]", "List images", true)
90 93
 	quiet := cmd.Bool([]string{"q", "-quiet"}, false, "Only show numeric IDs")
... ...
@@ -12,6 +12,11 @@ import (
12 12
 	"github.com/docker/docker/utils"
13 13
 )
14 14
 
15
+// CmdImport creates an empty filesystem image, imports the contents of the tarball into the image, and optionally tags the image.
16
+//
17
+// The URL argument is the address of a tarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) file. If the URL is '-', then the tar file is read from STDIN.
18
+//
19
+// Usage: docker import [OPTIONS] URL [REPOSITORY[:TAG]]
15 20
 func (cli *DockerCli) CmdImport(args ...string) error {
16 21
 	cmd := cli.Subcmd("import", "URL|- [REPOSITORY[:TAG]]", "Create an empty filesystem image and import the contents of the\ntarball (.tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz) into it, then\noptionally tag it.", true)
17 22
 	flChanges := opts.NewListOpts(nil)
... ...
@@ -12,7 +12,9 @@ import (
12 12
 	"github.com/docker/docker/utils"
13 13
 )
14 14
 
15
-// 'docker info': display system-wide information.
15
+// CmdInfo displays system-wide information.
16
+//
17
+// Usage: docker info
16 18
 func (cli *DockerCli) CmdInfo(args ...string) error {
17 19
 	cmd := cli.Subcmd("info", "", "Display system-wide information", true)
18 20
 	cmd.Require(flag.Exact, 0)
... ...
@@ -12,6 +12,9 @@ import (
12 12
 	"github.com/docker/docker/utils"
13 13
 )
14 14
 
15
+// CmdInspect displays low-level information on one or more containers or images.
16
+//
17
+// Usage: docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
15 18
 func (cli *DockerCli) CmdInspect(args ...string) error {
16 19
 	cmd := cli.Subcmd("inspect", "CONTAINER|IMAGE [CONTAINER|IMAGE...]", "Return low-level information on a container or image", true)
17 20
 	tmplStr := cmd.String([]string{"f", "#format", "-format"}, "", "Format the output using the given go template")
... ...
@@ -7,7 +7,9 @@ import (
7 7
 	"github.com/docker/docker/utils"
8 8
 )
9 9
 
10
-// 'docker kill NAME' kills a running container
10
+// CmdKill kills one or more running container using SIGKILL or a specified signal.
11
+//
12
+// Usage: docker kill [OPTIONS] CONTAINER [CONTAINER...]
11 13
 func (cli *DockerCli) CmdKill(args ...string) error {
12 14
 	cmd := cli.Subcmd("kill", "CONTAINER [CONTAINER...]", "Kill a running container using SIGKILL or a specified signal", true)
13 15
 	signal := cmd.String([]string{"s", "-signal"}, "KILL", "Signal to send to the container")
... ...
@@ -8,6 +8,11 @@ import (
8 8
 	"github.com/docker/docker/utils"
9 9
 )
10 10
 
11
+// CmdLoad loads an image from a tar archive.
12
+//
13
+// The tar archive is read from STDIN by default, or from a tar archive file.
14
+//
15
+// Usage: docker load [OPTIONS]
11 16
 func (cli *DockerCli) CmdLoad(args ...string) error {
12 17
 	cmd := cli.Subcmd("load", "", "Load an image from a tar archive on STDIN", true)
13 18
 	infile := cmd.String([]string{"i", "-input"}, "", "Read from a tar archive file, instead of STDIN")
... ...
@@ -17,7 +17,11 @@ import (
17 17
 	"github.com/docker/docker/utils"
18 18
 )
19 19
 
20
-// 'docker login': login / register a user to registry service.
20
+// CmdLogin logs in or registers a user to a Docker registry service.
21
+//
22
+// If no server is specified, the user will be logged into or registered to the registry's index server.
23
+//
24
+// Usage: docker login SERVER
21 25
 func (cli *DockerCli) CmdLogin(args ...string) error {
22 26
 	cmd := cli.Subcmd("login", "[SERVER]", "Register or log in to a Docker registry server, if no server is\nspecified \""+registry.IndexServerAddress()+"\" is the default.", true)
23 27
 	cmd.Require(flag.Max, 1)
... ...
@@ -8,7 +8,11 @@ import (
8 8
 	"github.com/docker/docker/utils"
9 9
 )
10 10
 
11
-// 'docker logout': log out a user from a registry service.
11
+// CmdLogout logs a user out from a Docker registry.
12
+//
13
+// If no server is specified, the user will be logged out from the registry's index server.
14
+//
15
+// Usage: docker logout [SERVER]
12 16
 func (cli *DockerCli) CmdLogout(args ...string) error {
13 17
 	cmd := cli.Subcmd("logout", "[SERVER]", "Log out from a Docker registry, if no server is\nspecified \""+registry.IndexServerAddress()+"\" is the default.", true)
14 18
 	cmd.Require(flag.Max, 1)
... ...
@@ -9,6 +9,9 @@ import (
9 9
 	"github.com/docker/docker/utils"
10 10
 )
11 11
 
12
+// CmdLogs fetches the logs of a given container.
13
+//
14
+// docker logs [OPTIONS] CONTAINER
12 15
 func (cli *DockerCli) CmdLogs(args ...string) error {
13 16
 	var (
14 17
 		cmd    = cli.Subcmd("logs", "CONTAINER", "Fetch the logs of a container", true)
... ...
@@ -7,6 +7,9 @@ import (
7 7
 	"github.com/docker/docker/utils"
8 8
 )
9 9
 
10
+// CmdPause pauses all processes within one or more containers.
11
+//
12
+// Usage: docker pause CONTAINER [CONTAINER...]
10 13
 func (cli *DockerCli) CmdPause(args ...string) error {
11 14
 	cmd := cli.Subcmd("pause", "CONTAINER [CONTAINER...]", "Pause all processes within a container", true)
12 15
 	cmd.Require(flag.Min, 1)
... ...
@@ -10,6 +10,10 @@ import (
10 10
 	"github.com/docker/docker/utils"
11 11
 )
12 12
 
13
+// CmdPort lists port mappings for a container.
14
+// If a private port is specified, it also shows the public-facing port that is NATed to the private port.
15
+//
16
+// Usage: docker port CONTAINER [PRIVATE_PORT[/PROTO]]
13 17
 func (cli *DockerCli) CmdPort(args ...string) error {
14 18
 	cmd := cli.Subcmd("port", "CONTAINER [PRIVATE_PORT[/PROTO]]", "List port mappings for the CONTAINER, or lookup the public-facing port that\nis NAT-ed to the PRIVATE_PORT", true)
15 19
 	cmd.Require(flag.Min, 1)
... ...
@@ -18,6 +18,9 @@ import (
18 18
 	"github.com/docker/docker/utils"
19 19
 )
20 20
 
21
+// CmdPs outputs a list of Docker containers.
22
+//
23
+// Usage: docker ps [OPTIONS]
21 24
 func (cli *DockerCli) CmdPs(args ...string) error {
22 25
 	var (
23 26
 		err error
... ...
@@ -14,6 +14,9 @@ import (
14 14
 	"github.com/docker/docker/utils"
15 15
 )
16 16
 
17
+// CmdPull pulls an image or a repository from the registry.
18
+//
19
+// Usage: docker pull [OPTIONS] IMAGENAME[:TAG|@DIGEST]
17 20
 func (cli *DockerCli) CmdPull(args ...string) error {
18 21
 	cmd := cli.Subcmd("pull", "NAME[:TAG|@DIGEST]", "Pull an image or a repository from the registry", true)
19 22
 	allTags := cmd.Bool([]string{"a", "-all-tags"}, false, "Download all tagged images in the repository")
... ...
@@ -13,6 +13,9 @@ import (
13 13
 	"github.com/docker/docker/utils"
14 14
 )
15 15
 
16
+// CmdPush pushes an image or repository to the registry.
17
+//
18
+// Usage: docker push NAME[:TAG]
16 19
 func (cli *DockerCli) CmdPush(args ...string) error {
17 20
 	cmd := cli.Subcmd("push", "NAME[:TAG]", "Push an image or a repository to the registry", true)
18 21
 	cmd.Require(flag.Exact, 1)
... ...
@@ -2,6 +2,9 @@ package client
2 2
 
3 3
 import "fmt"
4 4
 
5
+// CmdRename renames a container.
6
+//
7
+// Usage: docker rename OLD_NAME NEW_NAME
5 8
 func (cli *DockerCli) CmdRename(args ...string) error {
6 9
 	cmd := cli.Subcmd("rename", "OLD_NAME NEW_NAME", "Rename a container", true)
7 10
 	if err := cmd.Parse(args); err != nil {
... ...
@@ -9,6 +9,9 @@ import (
9 9
 	"github.com/docker/docker/utils"
10 10
 )
11 11
 
12
+// CmdRestart restarts one or more running containers.
13
+//
14
+// Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
12 15
 func (cli *DockerCli) CmdRestart(args ...string) error {
13 16
 	cmd := cli.Subcmd("restart", "CONTAINER [CONTAINER...]", "Restart a running container", true)
14 17
 	nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Seconds to wait for stop before killing the container")
... ...
@@ -9,7 +9,9 @@ import (
9 9
 	"github.com/docker/docker/utils"
10 10
 )
11 11
 
12
-// 'docker rmi IMAGE' removes all images with the name IMAGE
12
+// CmdRmi removes all images with the specified name(s).
13
+//
14
+// Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
13 15
 func (cli *DockerCli) CmdRmi(args ...string) error {
14 16
 	var (
15 17
 		cmd     = cli.Subcmd("rmi", "IMAGE [IMAGE...]", "Remove one or more images", true)
... ...
@@ -35,6 +35,9 @@ func (cid *cidFile) Write(id string) error {
35 35
 	return nil
36 36
 }
37 37
 
38
+// CmdRun runs a command in a new container.
39
+//
40
+// Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
38 41
 func (cli *DockerCli) CmdRun(args ...string) error {
39 42
 	// FIXME: just use runconfig.Parse already
40 43
 	cmd := cli.Subcmd("run", "IMAGE [COMMAND] [ARG...]", "Run a command in a new container", true)
... ...
@@ -10,6 +10,11 @@ import (
10 10
 	"github.com/docker/docker/utils"
11 11
 )
12 12
 
13
+// CmdSave saves one or more images to a tar archive.
14
+//
15
+// The tar archive is written to STDOUT by default, or written to a file.
16
+//
17
+// Usage: docker save [OPTIONS] IMAGE [IMAGE...]
13 18
 func (cli *DockerCli) CmdSave(args ...string) error {
14 19
 	cmd := cli.Subcmd("save", "IMAGE [IMAGE...]", "Save an image(s) to a tar archive (streamed to STDOUT by default)", true)
15 20
 	outfile := cmd.String([]string{"o", "-output"}, "", "Write to an file, instead of STDOUT")
... ...
@@ -11,6 +11,9 @@ import (
11 11
 	"github.com/docker/docker/utils"
12 12
 )
13 13
 
14
+// CmdSearch searches the Docker Hub for images.
15
+//
16
+// Usage: docker search [OPTIONS] TERM
14 17
 func (cli *DockerCli) CmdSearch(args ...string) error {
15 18
 	cmd := cli.Subcmd("search", "TERM", "Search the Docker Hub for images", true)
16 19
 	noTrunc := cmd.Bool([]string{"#notrunc", "-no-trunc"}, false, "Don't truncate output")
... ...
@@ -40,6 +40,9 @@ func (cli *DockerCli) forwardAllSignals(cid string) chan os.Signal {
40 40
 	return sigc
41 41
 }
42 42
 
43
+// CmdStart starts one or more stopped containers.
44
+//
45
+// Usage: docker start [OPTIONS] CONTAINER [CONTAINER...]
43 46
 func (cli *DockerCli) CmdStart(args ...string) error {
44 47
 	var (
45 48
 		cErr chan error
... ...
@@ -106,6 +106,11 @@ func (s *containerStats) Display(w io.Writer) error {
106 106
 	return nil
107 107
 }
108 108
 
109
+// CmdStats displays a live stream of resource usage statistics for one or more containers.
110
+//
111
+// This shows real-time information on CPU usage, memory usage, and network I/O.
112
+//
113
+// Usage: docker stats CONTAINER [CONTAINER...]
109 114
 func (cli *DockerCli) CmdStats(args ...string) error {
110 115
 	cmd := cli.Subcmd("stats", "CONTAINER [CONTAINER...]", "Display a live stream of one or more containers' resource usage statistics", true)
111 116
 	cmd.Require(flag.Min, 1)
... ...
@@ -9,6 +9,11 @@ import (
9 9
 	"github.com/docker/docker/utils"
10 10
 )
11 11
 
12
+// CmdStop stops one or more running containers.
13
+//
14
+// A running container is stopped by first sending SIGTERM and then SIGKILL if the container fails to stop within a grace period (the default is 10 seconds).
15
+//
16
+// Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
12 17
 func (cli *DockerCli) CmdStop(args ...string) error {
13 18
 	cmd := cli.Subcmd("stop", "CONTAINER [CONTAINER...]", "Stop a running container by sending SIGTERM and then SIGKILL after a\ngrace period", true)
14 19
 	nSeconds := cmd.Int([]string{"t", "-time"}, 10, "Seconds to wait for stop before killing it")
... ...
@@ -9,6 +9,9 @@ import (
9 9
 	"github.com/docker/docker/utils"
10 10
 )
11 11
 
12
+// CmdTag tags an image into a repository.
13
+//
14
+// Usage: docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
12 15
 func (cli *DockerCli) CmdTag(args ...string) error {
13 16
 	cmd := cli.Subcmd("tag", "IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]", "Tag an image into a repository", true)
14 17
 	force := cmd.Bool([]string{"f", "#force", "-force"}, false, "Force")
... ...
@@ -11,6 +11,9 @@ import (
11 11
 	"github.com/docker/docker/utils"
12 12
 )
13 13
 
14
+// CmdTop displays the running processes of a container.
15
+//
16
+// Usage: docker top CONTAINER
14 17
 func (cli *DockerCli) CmdTop(args ...string) error {
15 18
 	cmd := cli.Subcmd("top", "CONTAINER [ps OPTIONS]", "Display the running processes of a container", true)
16 19
 	cmd.Require(flag.Min, 1)
... ...
@@ -7,6 +7,9 @@ import (
7 7
 	"github.com/docker/docker/utils"
8 8
 )
9 9
 
10
+// CmdUnpause unpauses all processes within a container, for one or more containers.
11
+//
12
+// Usage: docker unpause CONTAINER [CONTAINER...]
10 13
 func (cli *DockerCli) CmdUnpause(args ...string) error {
11 14
 	cmd := cli.Subcmd("unpause", "CONTAINER [CONTAINER...]", "Unpause all processes within a container", true)
12 15
 	cmd.Require(flag.Min, 1)
... ...
@@ -12,7 +12,11 @@ import (
12 12
 	"github.com/docker/docker/utils"
13 13
 )
14 14
 
15
-// 'docker version': show version information
15
+// CmdVersion shows Docker version information.
16
+//
17
+// Available version information is shown for: client Docker version, client API version, client Go version, client Git commit, client OS/Arch, server Docker version, server API version, server Go version, server Git commit, and server OS/Arch.
18
+//
19
+// Usage: docker version
16 20
 func (cli *DockerCli) CmdVersion(args ...string) error {
17 21
 	cmd := cli.Subcmd("version", "", "Show the Docker version information.", true)
18 22
 	cmd.Require(flag.Exact, 0)
... ...
@@ -7,7 +7,11 @@ import (
7 7
 	"github.com/docker/docker/utils"
8 8
 )
9 9
 
10
-// 'docker wait': block until a container stops
10
+// CmdWait blocks until a container stops, then prints its exit code.
11
+//
12
+// If more than one container is specified, this will wait synchronously on each container.
13
+//
14
+// Usage: docker wait CONTAINER [CONTAINER...]
11 15
 func (cli *DockerCli) CmdWait(args ...string) error {
12 16
 	cmd := cli.Subcmd("wait", "CONTAINER [CONTAINER...]", "Block until a container stops, then print its exit code.", true)
13 17
 	cmd.Require(flag.Min, 1)