github.1git.de/docker/cli@v26.1.3+incompatible/cli/command/checkpoint/create.go (about)

     1  package checkpoint
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/docker/cli/cli"
     8  	"github.com/docker/cli/cli/command"
     9  	"github.com/docker/cli/cli/command/completion"
    10  	"github.com/docker/docker/api/types/checkpoint"
    11  	"github.com/spf13/cobra"
    12  )
    13  
    14  type createOptions struct {
    15  	container     string
    16  	checkpoint    string
    17  	checkpointDir string
    18  	leaveRunning  bool
    19  }
    20  
    21  func newCreateCommand(dockerCli command.Cli) *cobra.Command {
    22  	var opts createOptions
    23  
    24  	cmd := &cobra.Command{
    25  		Use:   "create [OPTIONS] CONTAINER CHECKPOINT",
    26  		Short: "Create a checkpoint from a running container",
    27  		Args:  cli.ExactArgs(2),
    28  		RunE: func(cmd *cobra.Command, args []string) error {
    29  			opts.container = args[0]
    30  			opts.checkpoint = args[1]
    31  			return runCreate(cmd.Context(), dockerCli, opts)
    32  		},
    33  		ValidArgsFunction: completion.NoComplete,
    34  	}
    35  
    36  	flags := cmd.Flags()
    37  	flags.BoolVar(&opts.leaveRunning, "leave-running", false, "Leave the container running after checkpoint")
    38  	flags.StringVar(&opts.checkpointDir, "checkpoint-dir", "", "Use a custom checkpoint storage directory")
    39  
    40  	return cmd
    41  }
    42  
    43  func runCreate(ctx context.Context, dockerCli command.Cli, opts createOptions) error {
    44  	err := dockerCli.Client().CheckpointCreate(ctx, opts.container, checkpoint.CreateOptions{
    45  		CheckpointID:  opts.checkpoint,
    46  		CheckpointDir: opts.checkpointDir,
    47  		Exit:          !opts.leaveRunning,
    48  	})
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	fmt.Fprintf(dockerCli.Out(), "%s\n", opts.checkpoint)
    54  	return nil
    55  }