diff --git a/cmd/nerdctl/container_inspect_linux_test.go b/cmd/nerdctl/container_inspect_linux_test.go index 7c1cc72154..58ceb359d7 100644 --- a/cmd/nerdctl/container_inspect_linux_test.go +++ b/cmd/nerdctl/container_inspect_linux_test.go @@ -22,6 +22,7 @@ import ( "testing" "github.com/containerd/nerdctl/v2/pkg/inspecttypes/dockercompat" + "github.com/containerd/nerdctl/v2/pkg/labels" "github.com/containerd/nerdctl/v2/pkg/testutil" "github.com/docker/go-connections/nat" "gotest.tools/v3/assert" @@ -156,6 +157,25 @@ func TestContainerInspectContainsLabel(t *testing.T) { assert.Equal(base.T, "bar", lbs["bar"]) } +func TestContainerInspectContainsInternalLabel(t *testing.T) { + testutil.DockerIncompatible(t) + t.Parallel() + testContainer := testutil.Identifier(t) + + base := testutil.NewBase(t) + defer base.Cmd("rm", "-f", testContainer).Run() + + base.Cmd("run", "-d", "--name", testContainer, "--mount", "type=bind,src=/tmp,dst=/app,readonly=false,bind-propagation=rprivate", testutil.NginxAlpineImage).AssertOK() + base.EnsureContainerStarted(testContainer) + inspect := base.InspectContainer(testContainer) + lbs := inspect.Config.Labels + + // TODO: add more internal labels testcases + labelMount := lbs[labels.Mounts] + expectedLabelMount := "[{\"Type\":\"bind\",\"Source\":\"/tmp\",\"Destination\":\"/app\",\"Mode\":\"rprivate,rbind\",\"RW\":true,\"Propagation\":\"rprivate\"}]" + assert.Equal(base.T, expectedLabelMount, labelMount) +} + func TestContainerInspectState(t *testing.T) { t.Parallel() testContainer := testutil.Identifier(t) diff --git a/pkg/cmd/container/create.go b/pkg/cmd/container/create.go index eb680fd0a6..3b7e6ff7c7 100644 --- a/pkg/cmd/container/create.go +++ b/pkg/cmd/container/create.go @@ -683,6 +683,7 @@ func dockercompatMounts(mountPoints []*mountutil.Processed) []dockercompat.Mount Driver: "", Mode: mp.Mode, } + result[i].RW, result[i].Propagation = dockercompat.ParseMountProperties(strings.Split(mp.Mode, ",")) // it's an anonymous volume if mp.AnonymousVolume != "" { diff --git a/pkg/inspecttypes/dockercompat/dockercompat.go b/pkg/inspecttypes/dockercompat/dockercompat.go index a344a2e9ec..032856173e 100644 --- a/pkg/inspecttypes/dockercompat/dockercompat.go +++ b/pkg/inspecttypes/dockercompat/dockercompat.go @@ -32,7 +32,6 @@ import ( "path/filepath" "runtime" "strconv" - "strings" "time" "github.com/containerd/containerd" @@ -485,18 +484,12 @@ func parseMounts(nerdctlMounts string) ([]MountPoint, error) { return nil, err } - for i := range mounts { - rw, propagation := parseMountProperties(mounts[i].Mode) - mounts[i].RW = rw - mounts[i].Propagation = propagation - } - return mounts, nil } -func parseMountProperties(option string) (rw bool, propagation string) { +func ParseMountProperties(option []string) (rw bool, propagation string) { rw = true - for _, opt := range strings.Split(option, ",") { + for _, opt := range option { switch opt { case "ro", "rro": rw = false