|  | @@ -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:]...)
 |