如何保存正在运行的 LXC 容器的状态?

如何保存正在运行的 LXC 容器的状态?

使用 VirtualBox 或 KVM,我可以保存客户虚拟机的状态,重新启动主机,然后恢复客户机。
如果我的客户机只是一个容器而不是虚拟机,我该怎么做?

答案1

这可以通过 CRIU 来完成。

请注意,它可以理论上完成,但如果你的容器做了任何稍微复杂的事情(比如,运行使用命名空间、有 tty 等的 systemd),它很可能会失败

更实际的答案是,目前还不能用通用容器来实现。也许将来可以,但考虑到 CRIU 目前的发展速度,可能性不大。

具体命令取决于您使用的是原始 LXC 还是 LXD 管理守护程序。


龙芯

如果你正在使用原始 LXC,那么你需要这个lxc-checkpoint工具。这里有一些示例在 CRIU 维基百科上, 和lxc-checkpoint 手册页

请注意CRIU 维基条目建议您以特殊方式配置容器,大概是为了尝试避免命名空间和设备继承问题:

lxc.console = none
lxc.tty = 0
lxc.cgroup.devices.deny = c 5:1 rwm

如果您需要容器中放置这些设备,那么这可能最终会成为一个交易障碍。

要创建检查点:

lxc-checkpoint -s -D /path/to/checkpoint -n containername

(注意-s创建检查点后停止容器)

要恢复检查点:

lxc-checkpoint -r -D /path/to/checkpoint -n containername

检查点将一直存在,直到您将其删除。


路心得

如果您使用的是 LXD 的 snap 安装,则首先需要启用 CRIU:

snap set lxd criu.enable=true
systemctl reload snap.lxd.daemon

要有状态地停止容器:

lxc stop --stateful containername

如果你以后lxc start 没有 --stateless,它应该恢复之前的状态。

您还可以使用lxc snapshot/手动创建有状态快照lxc restore

相关内容