Skip to content

Commit b262ece

Browse files
authored
Merge branch 'main' into fix-unprivileged-port-default
Signed-off-by: Yash Kukrecha <[email protected]>
2 parents 0a591e8 + 246b6c1 commit b262ece

File tree

8 files changed

+171
-33
lines changed

8 files changed

+171
-33
lines changed

.github/workflows/job-test-in-lima.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
id: lima-actions-setup
4040

4141
- name: "Init: Cache"
42-
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
42+
uses: actions/cache@a7833574556fa59680c1b7cb190c1735db73ebf0 # v5.0.0
4343
with:
4444
path: ~/.cache/lima
4545
key: lima-${{ steps.lima-actions-setup.outputs.version }}

.github/workflows/job-test-in-vagrant.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
fetch-depth: 1
2626

2727
- name: "Init: setup cache"
28-
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
28+
uses: actions/cache@a7833574556fa59680c1b7cb190c1735db73ebf0 # v5.0.0
2929
with:
3030
path: /root/.vagrant.d
3131
key: vagrant

cmd/nerdctl/compose/compose_up_linux_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,3 +671,73 @@ services:
671671
base.Cmd("images").AssertOutNotContains(testutil.CommonImage)
672672
base.ComposeCmd("-f", comp.YAMLFullPath(), "up").AssertExitCode(1)
673673
}
674+
675+
func TestComposeTmpfsVolume(t *testing.T) {
676+
testCase := nerdtest.Setup()
677+
678+
testCase.Setup = func(data test.Data, helpers test.Helpers) {
679+
containerName := data.Identifier("tmpfs")
680+
composeYAML := fmt.Sprintf(`
681+
services:
682+
tmpfs:
683+
container_name: %s
684+
image: %s
685+
command: sleep infinity
686+
volumes:
687+
- type: tmpfs
688+
target: /target-rw
689+
tmpfs:
690+
size: 64m
691+
- type: tmpfs
692+
target: /target-ro
693+
read_only: true
694+
tmpfs:
695+
size: 64m
696+
mode: 0o1770
697+
`, containerName, testutil.CommonImage)
698+
699+
composeYAMLPath := data.Temp().Save(composeYAML, "compose.yaml")
700+
701+
helpers.Ensure("compose", "-f", composeYAMLPath, "up", "-d")
702+
nerdtest.EnsureContainerStarted(helpers, containerName)
703+
704+
data.Labels().Set("composeYAML", composeYAMLPath)
705+
data.Labels().Set("containerName", containerName)
706+
}
707+
708+
testCase.SubTests = []*test.Case{
709+
{
710+
Description: "rw tmpfs mount",
711+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
712+
return helpers.Command("exec", data.Labels().Get("containerName"), "grep", "/target-rw", "/proc/mounts")
713+
},
714+
Expected: test.Expects(0, nil,
715+
expect.All(
716+
expect.Contains("/target-rw"),
717+
expect.Contains("rw"),
718+
expect.Contains("size=65536k"),
719+
),
720+
),
721+
},
722+
{
723+
Description: "ro tmpfs mount with mode",
724+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
725+
return helpers.Command("exec", data.Labels().Get("containerName"), "grep", "/target-ro", "/proc/mounts")
726+
},
727+
Expected: test.Expects(0, nil,
728+
expect.All(
729+
expect.Contains("/target-ro"),
730+
expect.Contains("ro"),
731+
expect.Contains("size=65536k"),
732+
expect.Contains("mode=1770"),
733+
),
734+
),
735+
},
736+
}
737+
738+
testCase.Cleanup = func(data test.Data, helpers test.Helpers) {
739+
helpers.Anyhow("compose", "-f", data.Labels().Get("composeYAML"), "down")
740+
}
741+
742+
testCase.Run(t)
743+
}

cmd/nerdctl/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func usage(c *cobra.Command) error {
111111
t += "\n"
112112
return t
113113
}
114-
s += printCommands("helpers.Management commands", managementCommands)
114+
s += printCommands("Management commands", managementCommands)
115115
s += printCommands("Commands", nonManagementCommands)
116116

117117
s += Bold("Flags") + ":\n"

go.mod

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ require (
2020
github.com/containerd/imgcrypt/v2 v2.0.2 //gomodjail:unconfined
2121
github.com/containerd/log v0.1.0
2222
github.com/containerd/nerdctl/mod/tigron v0.0.0
23-
github.com/containerd/nydus-snapshotter v0.15.8 //gomodjail:unconfined
23+
github.com/containerd/nydus-snapshotter v0.15.9 //gomodjail:unconfined
2424
github.com/containerd/platforms v1.0.0-rc.2 //gomodjail:unconfined
2525
github.com/containerd/stargz-snapshotter v0.18.1 //gomodjail:unconfined
2626
github.com/containerd/stargz-snapshotter/estargz v0.18.1 //gomodjail:unconfined
2727
github.com/containerd/stargz-snapshotter/ipfs v0.18.1 //gomodjail:unconfined
2828
github.com/containerd/typeurl/v2 v2.2.3
2929
github.com/containernetworking/cni v1.3.0 //gomodjail:unconfined
30-
github.com/containernetworking/plugins v1.8.0 //gomodjail:unconfined
30+
github.com/containernetworking/plugins v1.9.0 //gomodjail:unconfined
3131
github.com/coreos/go-iptables v0.8.0 //gomodjail:unconfined
3232
github.com/coreos/go-systemd/v22 v22.6.0
3333
github.com/cyphar/filepath-securejoin v0.6.1 //gomodjail:unconfined
@@ -63,12 +63,12 @@ require (
6363
github.com/yuchanns/srslog v1.1.0
6464
go.uber.org/mock v0.6.0
6565
go.yaml.in/yaml/v3 v3.0.4
66-
golang.org/x/crypto v0.45.0
67-
golang.org/x/net v0.47.0
68-
golang.org/x/sync v0.18.0 //gomodjail:unconfined
69-
golang.org/x/sys v0.38.0 //gomodjail:unconfined
70-
golang.org/x/term v0.37.0 //gomodjail:unconfined
71-
golang.org/x/text v0.31.0
66+
golang.org/x/crypto v0.46.0
67+
golang.org/x/net v0.48.0
68+
golang.org/x/sync v0.19.0 //gomodjail:unconfined
69+
golang.org/x/sys v0.39.0 //gomodjail:unconfined
70+
golang.org/x/term v0.38.0 //gomodjail:unconfined
71+
golang.org/x/text v0.32.0
7272
gotest.tools/v3 v3.5.2
7373
tags.cncf.io/container-device-interface v1.0.1 //gomodjail:unconfined
7474
)
@@ -135,7 +135,7 @@ require (
135135
go.opentelemetry.io/otel/trace v1.37.0 // indirect
136136
go.yaml.in/yaml/v2 v2.4.2 // indirect
137137
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
138-
golang.org/x/mod v0.29.0 // indirect
138+
golang.org/x/mod v0.30.0 // indirect
139139
google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b // indirect
140140
//gomodjail:unconfined
141141
google.golang.org/grpc v1.76.0 // indirect

go.sum

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ github.com/containerd/imgcrypt/v2 v2.0.2 h1:WOEaE33CaSxzuRF8YLfAjHWuu1Xh27aPPQtq
4949
github.com/containerd/imgcrypt/v2 v2.0.2/go.mod h1:8r4JW1b83jkDhaioOUZ7idxIYp+Wn1k4E4KXwy2oSNI=
5050
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
5151
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
52-
github.com/containerd/nydus-snapshotter v0.15.8 h1:UnXnbb1ZpxvOUcOmR0i31cLfuqkU9hXZraL/9EiFVWk=
53-
github.com/containerd/nydus-snapshotter v0.15.8/go.mod h1:EWRd/QJ0b6UKHAqYgiV5gHlqLC2qq5cQiSlXEdVovrA=
52+
github.com/containerd/nydus-snapshotter v0.15.9 h1:yFPr75WyO49sWJiBFMKNZo6kK4ed2hc13YxGn5KHWCU=
53+
github.com/containerd/nydus-snapshotter v0.15.9/go.mod h1:EWRd/QJ0b6UKHAqYgiV5gHlqLC2qq5cQiSlXEdVovrA=
5454
github.com/containerd/platforms v1.0.0-rc.2 h1:0SPgaNZPVWGEi4grZdV8VRYQn78y+nm6acgLGv/QzE4=
5555
github.com/containerd/platforms v1.0.0-rc.2/go.mod h1:J71L7B+aiM5SdIEqmd9wp6THLVRzJGXfNuWCZCllLA4=
5656
github.com/containerd/plugin v1.0.0 h1:c8Kf1TNl6+e2TtMHZt+39yAPDbouRH9WAToRjex483Y=
@@ -67,8 +67,8 @@ github.com/containerd/typeurl/v2 v2.2.3 h1:yNA/94zxWdvYACdYO8zofhrTVuQY73fFU1y++
6767
github.com/containerd/typeurl/v2 v2.2.3/go.mod h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk=
6868
github.com/containernetworking/cni v1.3.0 h1:v6EpN8RznAZj9765HhXQrtXgX+ECGebEYEmnuFjskwo=
6969
github.com/containernetworking/cni v1.3.0/go.mod h1:Bs8glZjjFfGPHMw6hQu82RUgEPNGEaBb9KS5KtNMnJ4=
70-
github.com/containernetworking/plugins v1.8.0 h1:WjGbV/0UQyo8A4qBsAh6GaDAtu1hevxVxsEuqtBqUFk=
71-
github.com/containernetworking/plugins v1.8.0/go.mod h1:JG3BxoJifxxHBhG3hFyxyhid7JgRVBu/wtooGEvWf1c=
70+
github.com/containernetworking/plugins v1.9.0 h1:Mg3SXBdRGkdXyFC4lcwr6u2ZB2SDeL6LC3U+QrEANuQ=
71+
github.com/containernetworking/plugins v1.9.0/go.mod h1:JG3BxoJifxxHBhG3hFyxyhid7JgRVBu/wtooGEvWf1c=
7272
github.com/containers/ocicrypt v1.2.1 h1:0qIOTT9DoYwcKmxSt8QJt+VzMY18onl9jUXsxpVhSmM=
7373
github.com/containers/ocicrypt v1.2.1/go.mod h1:aD0AAqfMp0MtwqWgHM1bUwe1anx0VazI108CRrSKINQ=
7474
github.com/coreos/go-iptables v0.8.0 h1:MPc2P89IhuVpLI7ETL/2tx3XZ61VeICZjYqDEgNsPRc=
@@ -361,8 +361,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY
361361
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
362362
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
363363
golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
364-
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
365-
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
364+
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
365+
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
366366
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
367367
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo=
368368
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak=
@@ -376,8 +376,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
376376
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
377377
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
378378
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
379-
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
380-
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
379+
golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk=
380+
golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc=
381381
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
382382
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
383383
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -394,8 +394,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
394394
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
395395
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
396396
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
397-
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
398-
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
397+
golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
398+
golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
399399
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
400400
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
401401
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -408,8 +408,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
408408
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
409409
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
410410
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
411-
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
412-
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
411+
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
412+
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
413413
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
414414
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
415415
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -432,8 +432,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
432432
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
433433
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
434434
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
435-
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
436-
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
435+
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
436+
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
437437
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
438438
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
439439
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -443,8 +443,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
443443
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
444444
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
445445
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
446-
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
447-
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
446+
golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
447+
golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
448448
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
449449
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
450450
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
@@ -454,8 +454,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
454454
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
455455
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
456456
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
457-
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
458-
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
457+
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
458+
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
459459
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
460460
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
461461
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -468,8 +468,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
468468
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
469469
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
470470
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
471-
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
472-
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
471+
golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ=
472+
golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
473473
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
474474
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
475475
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

pkg/composer/serviceparser/serviceparser.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,14 @@ func newContainer(project *types.Project, parsed *Service, i int) (*Container, e
699699
if err != nil {
700700
return nil, err
701701
}
702-
c.RunArgs = append(c.RunArgs, "-v="+vStr)
702+
703+
switch v.Type {
704+
case "tmpfs":
705+
c.RunArgs = append(c.RunArgs, "--tmpfs="+vStr)
706+
default:
707+
c.RunArgs = append(c.RunArgs, "-v="+vStr)
708+
}
709+
703710
c.Mkdir = mkdir
704711
}
705712

@@ -778,6 +785,7 @@ func serviceVolumeConfigToFlagV(c types.ServiceVolumeConfig, project *types.Proj
778785
"ReadOnly",
779786
"Bind",
780787
"Volume",
788+
"Tmpfs",
781789
); len(unknown) > 0 {
782790
log.L.Warnf("Ignoring: volume: %+v", unknown)
783791
}
@@ -800,6 +808,29 @@ func serviceVolumeConfigToFlagV(c types.ServiceVolumeConfig, project *types.Proj
800808
return "", nil, fmt.Errorf("volume target must be an absolute path, got %q", c.Target)
801809
}
802810

811+
if c.Type == "tmpfs" {
812+
var opts []string
813+
814+
if c.ReadOnly {
815+
opts = append(opts, "ro")
816+
}
817+
if c.Tmpfs != nil {
818+
if c.Tmpfs.Size != 0 {
819+
opts = append(opts, fmt.Sprintf("size=%d", c.Tmpfs.Size))
820+
}
821+
if c.Tmpfs.Mode != 0 {
822+
opts = append(opts, fmt.Sprintf("mode=%o", c.Tmpfs.Mode))
823+
}
824+
}
825+
826+
s := c.Target
827+
if len(opts) > 0 {
828+
s = fmt.Sprintf("%s:%s", s, strings.Join(opts, ","))
829+
}
830+
831+
return s, mkdir, nil
832+
}
833+
803834
if c.Source == "" {
804835
// anonymous volume
805836
s := c.Target

pkg/composer/serviceparser/serviceparser_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,43 @@ services:
439439
}
440440
}
441441

442+
func TestTmpfsVolumeLongSyntax(t *testing.T) {
443+
t.Parallel()
444+
445+
if runtime.GOOS == "windows" {
446+
t.Skip("test is not compatible with windows")
447+
}
448+
449+
const dockerComposeYAML = `
450+
services:
451+
foo:
452+
image: nginx:alpine
453+
volumes:
454+
- type: tmpfs
455+
target: /target
456+
read_only: true
457+
tmpfs:
458+
size: 2G
459+
mode: 0o1770
460+
`
461+
comp := testutil.NewComposeDir(t, dockerComposeYAML)
462+
defer comp.CleanUp()
463+
464+
project, err := testutil.LoadProject(comp.YAMLFullPath(), comp.ProjectName(), nil)
465+
assert.NilError(t, err)
466+
467+
fooSvc, err := project.GetService("foo")
468+
assert.NilError(t, err)
469+
470+
foo, err := Parse(project, fooSvc)
471+
assert.NilError(t, err)
472+
473+
t.Logf("foo: %+v", foo)
474+
for _, c := range foo.Containers {
475+
assert.Assert(t, in(c.RunArgs, "--tmpfs=/target:ro,size=2147483648,mode=1770"))
476+
}
477+
}
478+
442479
func TestParseNetworkMode(t *testing.T) {
443480
t.Parallel()
444481
const dockerComposeYAML = `

0 commit comments

Comments
 (0)