diff --git a/api/client/volume.go b/api/client/volume.go index 4963803de3..ccb01888d4 100644 --- a/api/client/volume.go +++ b/api/client/volume.go @@ -34,6 +34,7 @@ func (cli *DockerCli) CmdVolume(args ...string) error { description += "\nRun 'docker volume COMMAND --help' for more information on a command." cmd := Cli.Subcmd("volume", []string{"[COMMAND]"}, description, true) + cmd.Require(flag.Exact, 0) cmd.ParseFlags(args, true) return cli.CmdVolumeLs(args...) diff --git a/integration-cli/docker_cli_volume_test.go b/integration-cli/docker_cli_volume_test.go index dedce5bdfb..20392ec45a 100644 --- a/integration-cli/docker_cli_volume_test.go +++ b/integration-cli/docker_cli_volume_test.go @@ -88,3 +88,16 @@ func (s *DockerSuite) TestVolumeCliRm(c *check.C) { check.Commentf("volume rm should fail with non-existant volume"), ) } + +func (s *DockerSuite) TestVolumeCliNoArgs(c *check.C) { + out, _ := dockerCmd(c, "volume") + // no args should produce the `volume ls` output + c.Assert(strings.Contains(out, "DRIVER"), check.Equals, true) + + // invalid arg should error and show the command usage on stderr + _, stderr, _, err := runCommandWithStdoutStderr(exec.Command(dockerBinary, "volume", "somearg")) + c.Assert(err, check.NotNil) + + expected := "Usage: docker volume [OPTIONS] [COMMAND]" + c.Assert(strings.Contains(stderr, expected), check.Equals, true) +}