浏览代码

Reset the DockerCli and APIClient after loading the environment file

This forces a re-evaluation of the environment variables.

Signed-off-by: Ulysses Souza <[email protected]>
Ulysses Souza 3 年之前
父节点
当前提交
86c925fbd3
共有 1 个文件被更改,包括 14 次插入0 次删除
  1. 14 0
      cmd/compose/compose.go

+ 14 - 0
cmd/compose/compose.go

@@ -32,6 +32,8 @@ import (
 	dockercli "github.com/docker/cli/cli"
 	"github.com/docker/cli/cli-plugins/manager"
 	"github.com/docker/cli/cli/command"
+	"github.com/docker/cli/cli/flags"
+	"github.com/docker/docker/client"
 	"github.com/morikuni/aec"
 	"github.com/pkg/errors"
 	"github.com/sirupsen/logrus"
@@ -291,6 +293,18 @@ func RootCommand(dockerCli command.Cli, backend api.Service) *cobra.Command {
 			if err != nil {
 				return err
 			}
+
+			// Reset DockerCli and APIClient to get possible `DOCKER_HOST` and/or `DOCKER_CONTEXT` loaded from environment file
+			err = dockerCli.Apply(func(cli *command.DockerCli) error {
+				return cli.Initialize(flags.NewClientOptions(),
+					command.WithInitializeClient(func(_ *command.DockerCli) (client.APIClient, error) {
+						return nil, nil
+					}))
+			})
+			if err != nil {
+				return err
+			}
+
 			parent := cmd.Root()
 			if parent != nil {
 				parentPrerun := parent.PersistentPreRunE