diff --git a/cli/mobycli/exec.go b/cli/mobycli/exec.go index 1fd52fa7..95631edb 100644 --- a/cli/mobycli/exec.go +++ b/cli/mobycli/exec.go @@ -19,12 +19,13 @@ const ComDockerCli = "com.docker.cli" // Exec delegates to com.docker.cli if on moby context func Exec(ctx context.Context) { currentContext := apicontext.CurrentContext(ctx) + s := store.ContextStore(ctx) - _, err := s.Get(currentContext) + currentCtx, err := s.Get(currentContext) // Only run original docker command if the current context is not // ours. - if err != nil { + if err != nil || currentCtx.Type() == store.DefaultContextType { shellOut(ctx) } } diff --git a/context/store/contextmetadata.go b/context/store/contextmetadata.go index a9987dfd..38aabaa2 100644 --- a/context/store/contextmetadata.go +++ b/context/store/contextmetadata.go @@ -12,7 +12,7 @@ type DockerContext struct { // Type the context type func (m *DockerContext) Type() string { if m.Metadata.Type == "" { - return defaultContextType + return DefaultContextType } return m.Metadata.Type } diff --git a/context/store/store.go b/context/store/store.go index 25c604dd..75baa076 100644 --- a/context/store/store.go +++ b/context/store/store.go @@ -45,6 +45,17 @@ import ( const ( // DefaultContextName is an automatically generated local context DefaultContextName = "default" + // DefaultContextType is the type for all moby contexts (not associated with cli backend) + DefaultContextType = "moby" + // AciContextType is the endpoint key in the context endpoints for an ACI + // backend + AciContextType = "aci" + // LocalContextType is the endpoint key in the context endpoints for a new + // local backend + LocalContextType = "local" + // ExampleContextType is the endpoint key in the context endpoints for an + // example backend + ExampleContextType = "example" ) const ( @@ -92,18 +103,6 @@ type Endpoint struct { DefaultNamespace string `json:",omitempty"` } -const ( - // AciContextType is the endpoint key in the context endpoints for an ACI - // backend - AciContextType = "aci" - // LocalContextType is the endpoint key in the context endpoints for a new - // local backend - LocalContextType = "local" - // ExampleContextType is the endpoint key in the context endpoints for an - // example backend - ExampleContextType = "example" -) - type store struct { root string } diff --git a/context/store/storedefault.go b/context/store/storedefault.go index d81c5fd8..1d1a1e8f 100644 --- a/context/store/storedefault.go +++ b/context/store/storedefault.go @@ -8,8 +8,6 @@ import ( "github.com/pkg/errors" ) -const defaultContextType = "moby" - // Represents a context as created by the docker cli type defaultContext struct { Metadata ContextMetadata @@ -67,7 +65,7 @@ func dockerDefaultContext() (*DockerContext, error) { }, }, Metadata: ContextMetadata{ - Type: defaultContextType, + Type: DefaultContextType, Description: "Current DOCKER_HOST based configuration", StackOrchestrator: defaultCtx.Metadata.StackOrchestrator, }, diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 0c1412c3..cc612986 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -169,6 +169,13 @@ func (s *E2eSuite) TestLegacy() { output := s.NewDockerCommand("run", "--rm", "hello-world").WithTimeout(time.NewTimer(20 * time.Second).C).ExecOrDie() Expect(output).To(ContainSubstring("Hello from Docker!")) }) + + It("should execute legacy commands in other moby contexts", func() { + s.NewDockerCommand("context", "create", "mobyCtx", "--from=default").ExecOrDie() + s.NewDockerCommand("context", "use", "mobyCtx").ExecOrDie() + output, _ := s.NewDockerCommand("swarm", "join").Exec() + Expect(output).To(ContainSubstring("\"docker swarm join\" requires exactly 1 argument.")) + }) } func (s *E2eSuite) TestLeaveLegacyErrorMessagesUnchanged() {