瀏覽代碼

Merge pull request #29212 from yongtang/29185-docker-inspect

Fix `docker plugin inspect <unkown object>` issue on Windows
Brian Goff 8 年之前
父節點
當前提交
e91604c0d2
共有 3 個文件被更改,包括 18 次插入6 次删除
  1. 6 1
      cli/command/system/inspect.go
  2. 11 0
      integration-cli/docker_cli_plugins_test.go
  3. 1 5
      plugin/backend_unsupported.go

+ 6 - 1
cli/command/system/inspect.go

@@ -2,6 +2,7 @@ package system
 
 import (
 	"fmt"
+	"strings"
 
 	"golang.org/x/net/context"
 
@@ -156,6 +157,10 @@ func inspectAll(ctx context.Context, dockerCli *command.DockerCli, getSize bool,
 		return info.Swarm.ControlAvailable
 	}
 
+	isErrNotSupported := func(err error) bool {
+		return strings.Contains(err.Error(), "not supported")
+	}
+
 	return func(ref string) (interface{}, []byte, error) {
 		const (
 			swarmSupportUnknown = iota
@@ -183,7 +188,7 @@ func inspectAll(ctx context.Context, dockerCli *command.DockerCli, getSize bool,
 			}
 			v, raw, err := inspectData.objectInspector(ref)
 			if err != nil {
-				if typeConstraint == "" && apiclient.IsErrNotFound(err) {
+				if typeConstraint == "" && (apiclient.IsErrNotFound(err) || isErrNotSupported(err)) {
 					continue
 				}
 				return v, raw, err

+ 11 - 0
integration-cli/docker_cli_plugins_test.go

@@ -251,3 +251,14 @@ func (s *DockerSuite) TestPluginInspect(c *check.C) {
 	_, _, err = dockerCmdWithError("plugin", "inspect", "-f", "{{.Id}}", id[:5])
 	c.Assert(err, checker.NotNil)
 }
+
+// Test case for https://github.com/docker/docker/pull/29186#discussion_r91277345
+func (s *DockerSuite) TestPluginInspectOnWindows(c *check.C) {
+	// This test should work on Windows only
+	testRequires(c, DaemonIsWindows)
+
+	out, _, err := dockerCmdWithError("plugin", "inspect", "foobar")
+	c.Assert(err, checker.NotNil)
+	c.Assert(out, checker.Contains, "plugins are not supported on this platform")
+	c.Assert(err.Error(), checker.Contains, "plugins are not supported on this platform")
+}

+ 1 - 5
plugin/backend_unsupported.go

@@ -4,7 +4,6 @@ package plugin
 
 import (
 	"errors"
-	"fmt"
 	"io"
 	"net/http"
 
@@ -26,10 +25,7 @@ func (pm *Manager) Enable(name string, config *types.PluginEnableConfig) error {
 
 // Inspect examines a plugin config
 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)
+	return tp, errNotSupported
 }
 
 // Privileges pulls a plugin config and computes the privileges required to install it.