Skip to content

Commit 0eaa249

Browse files
authored
Merge pull request docker#10084 from ndeloof/secret_uid
apply uid/gid when creating secret from environment
2 parents 0fedddb + 5c1484e commit 0eaa249

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

pkg/compose/secrets.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"bytes"
2222
"context"
2323
"fmt"
24+
"strconv"
2425
"time"
2526

2627
"github.com/compose-spec/compose-go/types"
@@ -69,11 +70,29 @@ func createTar(env string, config types.ServiceSecretConfig) (bytes.Buffer, erro
6970
target = "/run/secrets/" + config.Target
7071
}
7172

73+
var uid, gid int
74+
if config.UID != "" {
75+
v, err := strconv.Atoi(config.UID)
76+
if err != nil {
77+
return b, err
78+
}
79+
uid = v
80+
}
81+
if config.GID != "" {
82+
v, err := strconv.Atoi(config.GID)
83+
if err != nil {
84+
return b, err
85+
}
86+
gid = v
87+
}
88+
7289
header := &tar.Header{
7390
Name: target,
7491
Size: int64(len(value)),
7592
Mode: int64(mode),
7693
ModTime: time.Now(),
94+
Uid: uid,
95+
Gid: gid,
7796
}
7897
err := tarWriter.WriteHeader(header)
7998
if err != nil {

pkg/e2e/fixtures/env-secret/compose.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ services:
22
foo:
33
image: alpine
44
secrets:
5-
- bar
5+
- source: secret
6+
target: bar
7+
uid: "1005"
8+
gid: "1005"
9+
mode: 0440
610
command: cat /run/secrets/bar
711

812
secrets:
9-
bar:
13+
secret:
1014
environment: SECRET
1115

pkg/e2e/secrets_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,11 @@ func TestSecretFromEnv(t *testing.T) {
3232
})
3333
res.Assert(t, icmd.Expected{Out: "BAR"})
3434
})
35+
t.Run("secret uid", func(t *testing.T) {
36+
res := icmd.RunCmd(c.NewDockerComposeCmd(t, "-f", "./fixtures/env-secret/compose.yaml", "run", "foo", "ls", "-al", "/var/run/secrets/bar"),
37+
func(cmd *icmd.Cmd) {
38+
cmd.Env = append(cmd.Env, "SECRET=BAR")
39+
})
40+
res.Assert(t, icmd.Expected{Out: "-r--r----- 1 1005 1005"})
41+
})
3542
}

0 commit comments

Comments
 (0)