From 62f838f7f8fde3f3a4c76ba3963e5937cd9f8b1f Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Wed, 21 Dec 2022 09:59:34 +0100 Subject: [PATCH] resolve environment incremently, including values loaded from previous files in the list Signed-off-by: Nicolas De Loof --- loader/loader.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/loader/loader.go b/loader/loader.go index 4449ba02..64b691ba 100644 --- a/loader/loader.go +++ b/loader/loader.go @@ -629,6 +629,12 @@ func convertVolumePath(volume types.ServiceVolumeConfig) types.ServiceVolumeConf func resolveEnvironment(serviceConfig *types.ServiceConfig, workingDir string, lookupEnv template.Mapping) error { environment := types.MappingWithEquals{} + var resolve dotenv.LookupFn = func(s string) (string, bool) { + if v, ok := environment[s]; ok && v != nil { + return *v, true + } + return lookupEnv(s) + } if len(serviceConfig.EnvFile) > 0 { if serviceConfig.Environment == nil { @@ -649,7 +655,7 @@ func resolveEnvironment(serviceConfig *types.ServiceConfig, workingDir string, l // Do not defer to avoid it inside a loop file.Close() //nolint:errcheck - fileVars, err := dotenv.ParseWithLookup(bytes.NewBuffer(b), dotenv.LookupFn(lookupEnv)) + fileVars, err := dotenv.ParseWithLookup(bytes.NewBuffer(b), resolve) if err != nil { return err }