diff --git a/cli/main.go b/cli/main.go index 16d019f3..c7f6bcaf 100644 --- a/cli/main.go +++ b/cli/main.go @@ -60,13 +60,25 @@ func init() { } } +func isContextCommand(cmd *cobra.Command) bool { + if cmd == nil { + return false + } + if cmd.Name() == "context" { + return true + } + return isContextCommand(cmd.Parent()) +} + func main() { var opts mainOpts root := &cobra.Command{ Use: "docker", Long: "docker for the 2020s", PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - execMoby(cmd.Context()) + if !isContextCommand(cmd) { + execMoby(cmd.Context()) + } return nil }, RunE: func(cmd *cobra.Command, args []string) error { @@ -76,7 +88,9 @@ func main() { helpFunc := root.HelpFunc() root.SetHelpFunc(func(cmd *cobra.Command, args []string) { - execMoby(cmd.Context()) + if !isContextCommand(cmd) { + execMoby(cmd.Context()) + } helpFunc(cmd, args) }) @@ -128,7 +142,9 @@ func withCurrentContext(ctx context.Context, opts mainOpts) (context.Context, er if currentContext == "" { currentContext = "default" } + logrus.Debugf("Current context %q", currentContext) + return context.WithValue(ctx, currentContextKey{}, currentContext), nil } @@ -146,6 +162,8 @@ func execMoby(ctx context.Context) { if err != nil { logrus.Fatal(err) } + // Only run original docker command if the current context is not + // ours. _, ok := cc.Metadata.(store.TypeContext) if !ok { cmd := exec.Command("docker", os.Args[1:]...)