diff --git a/daemon/create.go b/daemon/create.go index 445fc6e800..62262792bd 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -2,6 +2,7 @@ package daemon import ( "fmt" + "strings" "github.com/Sirupsen/logrus" "github.com/docker/docker/api/types" @@ -28,11 +29,14 @@ func (daemon *Daemon) ContainerCreate(name string, config *runconfig.Config, hos container, buildWarnings, err := daemon.Create(config, hostConfig, name) if err != nil { if daemon.Graph().IsNotExist(err, config.Image) { - _, tag := parsers.ParseRepositoryTag(config.Image) + if strings.Contains(config.Image, "@") { + return nil, warnings, fmt.Errorf("No such image: %s", config.Image) + } + img, tag := parsers.ParseRepositoryTag(config.Image) if tag == "" { tag = tags.DefaultTag } - return nil, warnings, fmt.Errorf("No such image: %s (tag: %s)", config.Image, tag) + return nil, warnings, fmt.Errorf("No such image: %s:%s", img, tag) } return nil, warnings, err } diff --git a/integration-cli/docker_api_create_test.go b/integration-cli/docker_api_create_test.go new file mode 100644 index 0000000000..96e4dc3689 --- /dev/null +++ b/integration-cli/docker_api_create_test.go @@ -0,0 +1,38 @@ +package main + +import ( + "net/http" + "strings" + + "github.com/go-check/check" +) + +func (s *DockerSuite) TestApiCreateWithNotExistImage(c *check.C) { + name := "test" + config := map[string]interface{}{ + "Image": "test456:v1", + "Volumes": map[string]struct{}{"/tmp": {}}, + } + + status, resp, err := sockRequest("POST", "/containers/create?name="+name, config) + c.Assert(err, check.IsNil) + c.Assert(status, check.Equals, http.StatusNotFound) + expected := "No such image: test456:v1" + if !strings.Contains(string(resp), expected) { + c.Fatalf("expected: %s, got: %s", expected, string(resp)) + } + + config2 := map[string]interface{}{ + "Image": "test456", + "Volumes": map[string]struct{}{"/tmp": {}}, + } + + status, resp, err = sockRequest("POST", "/containers/create?name="+name, config2) + c.Assert(err, check.IsNil) + c.Assert(status, check.Equals, http.StatusNotFound) + expected = "No such image: test456:latest" + if !strings.Contains(string(resp), expected) { + c.Fatalf("expected: %s, got: %s", expected, string(resp)) + } + +}