diff --git a/cmd/nerdctl/run_restart.go b/cmd/nerdctl/run_restart.go index 52fb392adf9..935fc700e27 100644 --- a/cmd/nerdctl/run_restart.go +++ b/cmd/nerdctl/run_restart.go @@ -19,7 +19,6 @@ package main import ( "context" "fmt" - "strconv" "strings" "github.com/containerd/containerd" @@ -70,13 +69,6 @@ func generateRestartOpts(ctx context.Context, client *containerd.Client, restart return opts, nil } -func updateContainerStoppedLabel(ctx context.Context, container containerd.Container, stopped bool) error { - opt := containerd.WithAdditionalContainerLabels(map[string]string{ - restart.ExplicitlyStoppedLabel: strconv.FormatBool(stopped), - }) - return container.Update(ctx, containerd.UpdateContainerOpts(opt)) -} - func updateContainerRestartPolicyLabel(ctx context.Context, client *containerd.Client, container containerd.Container, restartFlag string) error { if _, err := checkRestartCapabilities(ctx, client, restartFlag); err != nil { return err diff --git a/cmd/nerdctl/start.go b/cmd/nerdctl/start.go index 57248f15fd5..da6aa16b4a7 100644 --- a/cmd/nerdctl/start.go +++ b/cmd/nerdctl/start.go @@ -144,7 +144,7 @@ func startContainer(ctx context.Context, container containerd.Container, flagA b logrus.Warnf("container %s is already running", container.ID()) return nil } - if err := updateContainerStoppedLabel(ctx, container, false); err != nil { + if err := containerutil.UpdateExplicitlyStoppedLabel(ctx, container, false); err != nil { return err } if oldTask, err := container.Task(ctx, nil); err == nil { diff --git a/cmd/nerdctl/stop.go b/cmd/nerdctl/stop.go index f44c1921608..bef617fa287 100644 --- a/cmd/nerdctl/stop.go +++ b/cmd/nerdctl/stop.go @@ -22,6 +22,7 @@ import ( "time" "github.com/containerd/nerdctl/pkg/clientutil" + "github.com/containerd/nerdctl/pkg/containerutil" "github.com/spf13/cobra" "github.com/containerd/containerd" @@ -98,7 +99,7 @@ func stopAction(cmd *cobra.Command, args []string) error { } func stopContainer(ctx context.Context, container containerd.Container, timeout *time.Duration) error { - if err := updateContainerStoppedLabel(ctx, container, true); err != nil { + if err := containerutil.UpdateExplicitlyStoppedLabel(ctx, container, true); err != nil { return err } diff --git a/pkg/containerutil/containerutil.go b/pkg/containerutil/containerutil.go index ce04c63cc07..ec2ee1fb41a 100644 --- a/pkg/containerutil/containerutil.go +++ b/pkg/containerutil/containerutil.go @@ -20,10 +20,12 @@ import ( "context" "fmt" "io" + "strconv" "strings" "time" "github.com/containerd/containerd" + "github.com/containerd/containerd/runtime/restart" "github.com/containerd/nerdctl/pkg/portutil" ) @@ -84,3 +86,12 @@ func ContainerNetNSPath(ctx context.Context, c containerd.Container) (string, er } return fmt.Sprintf("/proc/%d/ns/net", task.Pid()), nil } + +// UpdateExplicitlyStoppedLabel updates the "containerd.io/restart.explicitly-stopped" +// label of the container according to the value of explicitlyStopped. +func UpdateExplicitlyStoppedLabel(ctx context.Context, container containerd.Container, explicitlyStopped bool) error { + opt := containerd.WithAdditionalContainerLabels(map[string]string{ + restart.ExplicitlyStoppedLabel: strconv.FormatBool(explicitlyStopped), + }) + return container.Update(ctx, containerd.UpdateContainerOpts(opt)) +}