fix support for secret set by env inside included file

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2025-03-14 09:06:31 +01:00 committed by Guillaume Lours
parent 432ae23b0e
commit ea07ba8e2a
5 changed files with 34 additions and 4 deletions

View File

@ -45,11 +45,15 @@ func (s *composeService) injectSecrets(ctx context.Context, project *types.Proje
config.Target = "/run/secrets/" + config.Target config.Target = "/run/secrets/" + config.Target
} }
env, ok := project.Environment[file.Environment] content := file.Content
if !ok { if content == "" {
return fmt.Errorf("environment variable %q required by secret %q is not set", file.Environment, file.Name) env, ok := project.Environment[file.Environment]
if !ok {
return fmt.Errorf("environment variable %q required by secret %q is not set", file.Environment, file.Name)
}
content = env
} }
b, err := createTar(env, types.FileReferenceConfig(config)) b, err := createTar(content, types.FileReferenceConfig(config))
if err != nil { if err != nil {
return err return err
} }

View File

@ -0,0 +1,10 @@
services:
included:
image: alpine
secrets:
- my-secret
command: cat /run/secrets/my-secret
secrets:
my-secret:
environment: 'MY_SECRET'

View File

@ -1,3 +1,8 @@
include:
- path: child/compose.yaml
env_file:
- secret.env
services: services:
foo: foo:
image: alpine image: alpine

View File

@ -0,0 +1 @@
MY_SECRET='this-is-secret'

View File

@ -41,3 +41,13 @@ func TestSecretFromEnv(t *testing.T) {
res.Assert(t, icmd.Expected{Out: "-r--r----- 1 1005 1005"}) res.Assert(t, icmd.Expected{Out: "-r--r----- 1 1005 1005"})
}) })
} }
func TestSecretFromInclude(t *testing.T) {
c := NewParallelCLI(t)
defer c.cleanupWithDown(t, "env-secret-include")
t.Run("compose run", func(t *testing.T) {
res := c.RunDockerComposeCmd(t, "-f", "./fixtures/env-secret/compose.yaml", "run", "included")
res.Assert(t, icmd.Expected{Out: "this-is-secret"})
})
}