diff --git a/integration-cli/docker_cli_plugins_test.go b/integration-cli/docker_cli_plugins_test.go index 4846744d62..252df5acef 100644 --- a/integration-cli/docker_cli_plugins_test.go +++ b/integration-cli/docker_cli_plugins_test.go @@ -52,3 +52,10 @@ func (s *DockerSuite) TestPluginInstallDisable(c *check.C) { c.Assert(err, checker.IsNil) c.Assert(out, checker.Contains, nameWithTag) } + +func (s *DockerSuite) TestPluginInstallImage(c *check.C) { + testRequires(c, DaemonIsLinux, ExperimentalDaemon) + out, _, err := dockerCmdWithError("plugin", "install", "redis") + c.Assert(err, checker.NotNil) + c.Assert(out, checker.Contains, "content is not a plugin") +} diff --git a/plugin/distribution/pull.go b/plugin/distribution/pull.go index 61971b3ee6..1bae8d4bb7 100644 --- a/plugin/distribution/pull.go +++ b/plugin/distribution/pull.go @@ -104,7 +104,7 @@ func Pull(name string, rs registry.Service, metaheader http.Header, authConfig * } if !confirmedV2 { logrus.Debugf("pull.go: !confirmedV2") - return nil, ErrUnSupportedRegistry + return nil, ErrUnsupportedRegistry } logrus.Debugf("Trying to pull %s from %s %s", repoInfo.Name(), endpoint.URL, endpoint.Version) break @@ -143,6 +143,9 @@ func Pull(name string, rs registry.Service, metaheader http.Header, authConfig * logrus.Debugf("pull.go: error in json.Unmarshal(): %v", err) return nil, err } + if m.Config.MediaType != MediaTypeConfig { + return nil, ErrUnsupportedMediaType + } pd := &pullData{ repository: repository, diff --git a/plugin/distribution/push.go b/plugin/distribution/push.go index 45deea83bb..27e717af4c 100644 --- a/plugin/distribution/push.go +++ b/plugin/distribution/push.go @@ -51,7 +51,7 @@ func Push(name string, rs registry.Service, metaHeader http.Header, authConfig * return "", err } if !confirmedV2 { - return "", ErrUnSupportedRegistry + return "", ErrUnsupportedRegistry } logrus.Debugf("Trying to push %s to %s %s", repoInfo.Name(), endpoint.URL, endpoint.Version) // This means that we found an endpoint. and we are ready to push diff --git a/plugin/distribution/types.go b/plugin/distribution/types.go index e1c05b76ff..0b1fd7aea1 100644 --- a/plugin/distribution/types.go +++ b/plugin/distribution/types.go @@ -4,8 +4,11 @@ package distribution import "errors" -// ErrUnSupportedRegistry indicates that the registry does not support v2 protocol -var ErrUnSupportedRegistry = errors.New("Only V2 repositories are supported for plugin distribution") +// ErrUnsupportedRegistry indicates that the registry does not support v2 protocol +var ErrUnsupportedRegistry = errors.New("only V2 repositories are supported for plugin distribution") + +// ErrUnsupportedMediaType indicates we are pulling content that's not a plugin +var ErrUnsupportedMediaType = errors.New("content is not a plugin") // Plugin related media types const (