
使用 VirtualBox 或 KVM,我可以儲存來賓虛擬機器的狀態,重新啟動主機,然後恢復來賓虛擬機器。
如果我的來賓只是一個容器而不是虛擬機,我該怎麼做?
答案1
這可以透過 CRIU 來完成。
請注意,它還可以理論上已經完成了,但是如果您的容器執行任何遠端複雜的操作(例如,請執行使用命名空間、具有 tty 等的 systemd...),它可能會失敗。
更實際的答案是,現階段還無法用通用容器來完成。也許將來會發生,但考慮到 CRIU 目前的發展速度,這種可能性不大。
具體指令會有所不同,取決於您使用的是原始 LXC 還是 LXD 管理守護程式。
LXC
如果您使用原始 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
如果您使用 LXD 的快照安裝,您首先需要啟用 CRIU:
snap set lxd criu.enable=true
systemctl reload snap.lxd.daemon
有狀態地停止容器:
lxc stop --stateful containername
如果你以後lxc start
沒有 --stateless
,它應該恢復之前的狀態。
您也可以使用lxc snapshot
/手動建立有狀態快照lxc restore
。