Skip to content

Conversation

ChengyuZhu6
Copy link
Member

Fixes: #4483

@ChengyuZhu6 ChengyuZhu6 added this to the v2.1.5 (?) milestone Aug 29, 2025
@ChengyuZhu6 ChengyuZhu6 force-pushed the checkpoint branch 8 times, most recently from b6e106e to fee41f4 Compare September 1, 2025 11:44
@ChengyuZhu6 ChengyuZhu6 marked this pull request as ready for review September 14, 2025 04:09
@ChengyuZhu6 ChengyuZhu6 force-pushed the checkpoint branch 7 times, most recently from 292ceb4 to c4ed970 Compare September 14, 2025 08:36
@ChengyuZhu6
Copy link
Member Author

ChengyuZhu6 commented Sep 14, 2025

# nerdctl run -d --name test-container ghcr.io/stargz-containers/alpine:3.13-org sleep infinity
b2a7213fd10f898f5af65493692aa2d1c18b9abd26fc477cc2c302170398987d

# nerdctl checkpoint create --leave-running=true --checkpoint-dir /tmp/test-checkpoints test-container test-checkpoint
test-checkpoint

# ls /tmp/test-checkpoints/test-checkpoint/
cgroup.img        files.img      ipcns-var-11.img    pages-1.img   tmpfs-dev-49.tar.gz.img  tmpfs-dev-55.tar.gz.img
core-1.img        fs-1.img       mm-1.img            pstree.img    tmpfs-dev-52.tar.gz.img  utsns-12.img
descriptors.json  ids-1.img      mountpoints-13.img  seccomp.img   tmpfs-dev-53.tar.gz.img
fdinfo-2.img      inventory.img  pagemap-1.img       timens-0.img  tmpfs-dev-54.tar.gz.img

@ChengyuZhu6 ChengyuZhu6 force-pushed the checkpoint branch 10 times, most recently from 05cc852 to 61e9bac Compare September 15, 2025 02:35
@ChengyuZhu6 ChengyuZhu6 force-pushed the checkpoint branch 5 times, most recently from 4fd28fb to d611488 Compare September 15, 2025 07:10
@AkihiroSuda AkihiroSuda mentioned this pull request Sep 22, 2025
@ChengyuZhu6 ChengyuZhu6 removed this from the v2.1.5 milestone Sep 24, 2025
@ChengyuZhu6 ChengyuZhu6 force-pushed the checkpoint branch 2 times, most recently from d9d2375 to 968e261 Compare September 25, 2025 12:07
Flags:
- :whale: `--leave-running`: Leave the container running after checkpoint
- :whale: `checkpoint-dir`: Use a custom checkpoint storage directory

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How to restore a container from a checkpoint?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be accomplished with the command nerdctl start --checkpoint|--checkpoint-dir in the following work: #4477

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you put the start implementation in this PR too? Otherwise it is hard to test this PR.
You can include ls and rm in this PR too

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, you're right. I think I can put the start parts in this PR.

- Create checkpoints from running containers using containerd APIs
- Support both leave-running and exit modes via --leave-running flag
- Configurable checkpoint directory via --checkpoint-dir flag

Signed-off-by: ChengyuZhu6 <[email protected]>
add unit tests for checkpoint create command.

Signed-off-by: ChengyuZhu6 <[email protected]>
add checkpoint create command reference.

Signed-off-by: ChengyuZhu6 <[email protected]>
@ChengyuZhu6
Copy link
Member Author

Error: pkg/taskutil/taskutil.go:51:1: argument-limit: maximum number of arguments per function exceeded; max 12 but got 13 (revive)
func NewTask(ctx context.Context, client *containerd.Client, container containerd.Container,
	attachStreamOpt []string, isInteractive, isTerminal, isDetach bool, con console.Console, logURI, detachKeys, namespace string, detachC chan<- struct{}, checkpointDir string) 

We also need to refactor the NewTask function...

@ChengyuZhu6 ChengyuZhu6 force-pushed the checkpoint branch 6 times, most recently from 1c2c53a to 8d7861d Compare October 11, 2025 15:58
add checkpoint restore support to container start.
e.g.:
$ nerdctl run --name cr -d busybox sleep infinity
$ nerdctl checkpoint create cr checkpoint1
$ nerdctl start --checkpoint checkpoint  cr

Signed-off-by: ChengyuZhu6 <[email protected]>
add unit test for container start with checkpoint.

Signed-off-by: ChengyuZhu6 <[email protected]>
add nerdctl start with checkpoint command reference.

Signed-off-by: ChengyuZhu6 <[email protected]>
install criu in ci to test checkpoint.

Signed-off-by: ChengyuZhu6 <[email protected]>
introduce taskoptions to reduce argument numbers.
Otherwise, ci would be failed by:
```
Error: pkg/taskutil/taskutil.go:51:1: argument-limit:
maximum number of arguments per function exceeded; max 12 but got 13
func NewTask(ctx context.Context, client *containerd.Client,
container containerd.Container, attachStreamOpt []string,
isInteractive, isTerminal, isDetach bool, con console.Console,
logURI, detachKeys, namespace string, detachC chan<- struct{}, checkpointDir string)
```

Signed-off-by: ChengyuZhu6 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Track development: nerdctl checkpoint create

2 participants