diff --git a/cmd/ctr/commands/commands.go b/cmd/ctr/commands/commands.go index 8344111d4..73f34dd7e 100644 --- a/cmd/ctr/commands/commands.go +++ b/cmd/ctr/commands/commands.go @@ -37,6 +37,12 @@ var ( }, } + // SnapshotterLabels are cli flags specifying labels which will be add to the new snapshot for container. + SnapshotterLabels = cli.StringSliceFlag{ + Name: "snapshotter-label", + Usage: "labels added to the new snapshot for this container.", + } + // LabelFlag is a cli flag specifying labels LabelFlag = cli.StringSliceFlag{ Name: "label", diff --git a/cmd/ctr/commands/containers/containers.go b/cmd/ctr/commands/containers/containers.go index f87b0c6ba..de503c38a 100644 --- a/cmd/ctr/commands/containers/containers.go +++ b/cmd/ctr/commands/containers/containers.go @@ -55,7 +55,7 @@ var createCommand = cli.Command{ Name: "create", Usage: "create container", ArgsUsage: "[flags] Image|RootFS CONTAINER [COMMAND] [ARG...]", - Flags: append(commands.SnapshotterFlags, commands.ContainerFlags...), + Flags: append(append(commands.SnapshotterFlags, []cli.Flag{commands.SnapshotterLabels}...), commands.ContainerFlags...), Action: func(context *cli.Context) error { var ( id string diff --git a/cmd/ctr/commands/run/run.go b/cmd/ctr/commands/run/run.go index 162bf1470..0c8088a1c 100644 --- a/cmd/ctr/commands/run/run.go +++ b/cmd/ctr/commands/run/run.go @@ -122,7 +122,9 @@ var Command = cli.Command{ Name: "platform", Usage: "run image for specific platform", }, - }, append(platformRunFlags, append(commands.SnapshotterFlags, commands.ContainerFlags...)...)...), + }, append(platformRunFlags, + append(append(commands.SnapshotterFlags, []cli.Flag{commands.SnapshotterLabels}...), + commands.ContainerFlags...)...)...), Action: func(context *cli.Context) error { var ( err error diff --git a/cmd/ctr/commands/run/run_unix.go b/cmd/ctr/commands/run/run_unix.go index 12e8371e7..e01141e75 100644 --- a/cmd/ctr/commands/run/run_unix.go +++ b/cmd/ctr/commands/run/run_unix.go @@ -35,6 +35,7 @@ import ( runtimeoptions "github.com/containerd/containerd/pkg/runtimeoptions/v1" "github.com/containerd/containerd/platforms" "github.com/containerd/containerd/runtime/v2/runc/options" + "github.com/containerd/containerd/snapshots" "github.com/opencontainers/runtime-spec/specs-go" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -171,7 +172,10 @@ func NewContainer(ctx gocontext.Context, client *containerd.Client, context *cli // Even when "read-only" is set, we don't use KindView snapshot here. (#1495) // We pass writable snapshot to the OCI runtime, and the runtime remounts it as read-only, // after creating some mount points on demand. - cOpts = append(cOpts, containerd.WithNewSnapshot(id, image)) + // For some snapshotter, such as overlaybd, it can provide 2 kind of writable snapshot(overlayfs dir or block-device) + // by command label values. + cOpts = append(cOpts, containerd.WithNewSnapshot(id, image, + snapshots.WithLabels(commands.LabelArgs(context.StringSlice("snapshotter-label"))))) } cOpts = append(cOpts, containerd.WithImageStopSignal(image, "SIGTERM")) }