diff --git a/api/client/volume.go b/api/client/volume.go index 80799d093f..6943db17d3 100644 --- a/api/client/volume.go +++ b/api/client/volume.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "io" + "net/http" "net/url" "text/tabwriter" "text/template" @@ -128,7 +129,12 @@ func (cli *DockerCli) CmdVolumeInspect(args ...string) error { for _, name := range cmd.Args() { resp, err := cli.call("GET", "/volumes/"+name, nil, nil) if err != nil { - return err + if resp.statusCode != http.StatusNotFound { + return err + } + status = 1 + fmt.Fprintf(cli.err, "Error: No such volume: %s\n", name) + continue } var volume types.Volume diff --git a/integration-cli/docker_cli_volume_test.go b/integration-cli/docker_cli_volume_test.go index d9246a462a..29c554eec0 100644 --- a/integration-cli/docker_cli_volume_test.go +++ b/integration-cli/docker_cli_volume_test.go @@ -50,6 +50,19 @@ func (s *DockerSuite) TestVolumeCliInspect(c *check.C) { c.Assert(strings.TrimSpace(out), check.Equals, "test") } +func (s *DockerSuite) TestVolumeCliInspectMulti(c *check.C) { + dockerCmd(c, "volume", "create", "--name", "test1") + dockerCmd(c, "volume", "create", "--name", "test2") + + out, _ := dockerCmd(c, "volume", "inspect", "--format='{{ .Name }}'", "test1", "test2", "doesntexist") + outArr := strings.Split(strings.TrimSpace(out), "\n") + c.Assert(len(outArr), check.Equals, 3, check.Commentf("\n%s", out)) + + c.Assert(strings.Contains(out, "test1\n"), check.Equals, true) + c.Assert(strings.Contains(out, "test2\n"), check.Equals, true) + c.Assert(strings.Contains(out, "Error: No such volume: doesntexist\n"), check.Equals, true) +} + func (s *DockerSuite) TestVolumeCliLs(c *check.C) { prefix := "" if daemonPlatform == "windows" {