From bec385cff03a663cc6d9c5e1b32199a666bf0aa7 Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Tue, 6 Dec 2016 10:29:48 -0800 Subject: [PATCH] Fix `docker inspect ` issue on Windows This fix tries to address the issue raised on 29185 where `docker inspect ` on Windows will return: ``` Error response from daemon: plugins are not supported on this platform ``` The reason was that in case `--type` is not specified, `docker inspect` will iterate through different types `container`, `image`, `network`, `plugin` etc. The `plugin` object is the last type to check. However, as `plugin` is not supported on Windows yet, the error message is not very informative for `plugins are not supported on this platform`. This fix tries to fix the issue by return a `not found` error on unsupported platforms as well. An integration test has been added to cover the changes for Windows/Linux. This fix fixes 29185. Signed-off-by: Yong Tang (cherry picked from commit 88fcdb0a825da040ef2b1f9c191af480f0f2cc90) Signed-off-by: Victor Vieux --- integration-cli/docker_cli_inspect_test.go | 9 +++++++++ plugin/backend_unsupported.go | 8 ++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/integration-cli/docker_cli_inspect_test.go b/integration-cli/docker_cli_inspect_test.go index 5d79ad1d85..2f2a918f0f 100644 --- a/integration-cli/docker_cli_inspect_test.go +++ b/integration-cli/docker_cli_inspect_test.go @@ -447,3 +447,12 @@ func (s *DockerSuite) TestInspectPlugin(c *check.C) { c.Assert(err, checker.IsNil) c.Assert(out, checker.Contains, pNameWithTag) } + +// Test case for 29185 +func (s *DockerSuite) TestInspectUnknownObject(c *check.C) { + // This test should work on both Windows and Linux + out, _, err := dockerCmdWithError("inspect", "foobar") + c.Assert(err, checker.NotNil) + c.Assert(out, checker.Contains, "Error: No such object: foobar") + c.Assert(err.Error(), checker.Contains, "Error: No such object: foobar") +} diff --git a/plugin/backend_unsupported.go b/plugin/backend_unsupported.go index 0e07cd679a..2d4b365faf 100644 --- a/plugin/backend_unsupported.go +++ b/plugin/backend_unsupported.go @@ -4,6 +4,7 @@ package plugin import ( "errors" + "fmt" "io" "net/http" @@ -24,8 +25,11 @@ func (pm *Manager) Enable(name string, config *types.PluginEnableConfig) error { } // Inspect examines a plugin config -func (pm *Manager) Inspect(name string) (tp types.Plugin, err error) { - return tp, errNotSupported +func (pm *Manager) Inspect(refOrID string) (tp types.Plugin, err error) { + // Even though plugin is not supported, we still want to return `not found` + // error so that `docker inspect` (without `--type` specified) returns correct + // `not found` message + return tp, fmt.Errorf("no such plugin name or ID associated with %q", refOrID) } // Privileges pulls a plugin config and computes the privileges required to install it.