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 }