From a79346b9789bcfbd18f1c0cfa606e04eed2bfe0d Mon Sep 17 00:00:00 2001 From: Ulysses Souza Date: Fri, 5 Nov 2021 18:58:40 +0100 Subject: [PATCH] Support inherited environment vars on exec Signed-off-by: Ulysses Souza --- cmd/compose/exec.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/cmd/compose/exec.go b/cmd/compose/exec.go index f5be30985..580f4b8dc 100644 --- a/cmd/compose/exec.go +++ b/cmd/compose/exec.go @@ -21,11 +21,12 @@ import ( "fmt" "os" + "github.com/compose-spec/compose-go/types" "github.com/containerd/console" "github.com/docker/cli/cli" - "github.com/spf13/cobra" - "github.com/docker/compose/v2/pkg/api" + "github.com/docker/compose/v2/pkg/compose" + "github.com/spf13/cobra" ) type execOpts struct { @@ -77,15 +78,22 @@ func execCommand(p *projectOptions, backend api.Service) *cobra.Command { } func runExec(ctx context.Context, backend api.Service, opts execOpts) error { - project, err := opts.toProjectName() + projectName, err := opts.toProjectName() if err != nil { return err } - + projectOptions, err := opts.composeOptions.toProjectOptions() + if err != nil { + return err + } + lookupFn := func(k string) (string, bool) { + v, ok := projectOptions.Environment[k] + return v, ok + } execOpts := api.RunOptions{ Service: opts.service, Command: opts.command, - Environment: opts.environment, + Environment: compose.ToMobyEnv(types.NewMappingWithEquals(opts.environment).Resolve(lookupFn)), Tty: !opts.noTty, User: opts.user, Privileged: opts.privileged, @@ -113,7 +121,7 @@ func runExec(ctx context.Context, backend api.Service, opts execOpts) error { execOpts.Stdout = con execOpts.Stderr = con } - exitCode, err := backend.Exec(ctx, project, execOpts) + exitCode, err := backend.Exec(ctx, projectName, execOpts) if exitCode != 0 { errMsg := "" if err != nil {