Juergen Asked: 2022-06-03 05:03:16 +0800 CST2022-06-03 05:03:16 +0800 CST 2022-06-03 05:03:16 +0800 CST 如何保存正在运行的 LXC 容器的状态? 772 使用 VirtualBox 或 KVM,我可以保存来宾 VM 的状态,重新启动主机,然后恢复来宾。如果我的客人只是一个容器而不是虚拟机,我该怎么做? lxc 1 个回答 Voted Best Answer Bob 2022-06-03T06:28:27+08:002022-06-03T06:28:27+08:00 这可以通过 CRIU 来完成。 请注意,理论上它可以完成的更多,但是如果您的容器执行任何远程复杂的操作(例如,运行使用命名空间的 systemd,具有 tty 等...),它可能会失败。 更实际的答案是现阶段无法使用通用容器来完成。也许在未来,但考虑到 CRIU 目前的发展速度,这不太可能。 具体命令取决于您使用的是原始 LXC 还是 LXD 管理守护程序。 LXC 如果您使用的是原始 LXC,您将需要该lxc-checkpoint工具。CRIU wiki和lxc-checkpoint 手册页上有一些示例。 请注意CRIU wiki 条目建议您以特殊方式配置容器,大概是为了避免命名空间和设备继承问题: 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 如果您使用的是 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。
这可以通过 CRIU 来完成。
请注意,理论上它可以完成的更多,但是如果您的容器执行任何远程复杂的操作(例如,运行使用命名空间的 systemd,具有 tty 等...),它可能会失败。
更实际的答案是现阶段无法使用通用容器来完成。也许在未来,但考虑到 CRIU 目前的发展速度,这不太可能。
具体命令取决于您使用的是原始 LXC 还是 LXD 管理守护程序。
LXC
如果您使用的是原始 LXC,您将需要该
lxc-checkpoint
工具。CRIU wiki和lxc-checkpoint 手册页上有一些示例。请注意CRIU wiki 条目建议您以特殊方式配置容器,大概是为了避免命名空间和设备继承问题:
如果您在容器中需要这些设备,这最终可能会成为一个破坏者。
创建检查点:
(注意
-s
在创建检查点后停止容器)要恢复检查点:
检查点将一直存在,直到您将其删除。
LXD
如果您使用的是 LXD 的 snap 安装,您首先需要启用 CRIU:
有状态地停止容器:
如果你以后
lxc start
没有--stateless
,它应该恢复以前的状态。您还可以使用
lxc snapshot
/手动创建有状态快照lxc restore
。