快照让你从正在运行的 Container 保存某个时间点的文件系统状态。本页示例使用 Durable Object Container API。
使用 snapshotContainer() 捕获完整的容器文件系统。快照是不可变的。如果你恢复快照然后更改文件,请创建新快照以持久化这些更改。
返回的快照句柄是一个普通数据对象。你可以存储它并稍后恢复,包括从另一个 Durable Object 恢复:
import { DurableObject } from "cloudflare:workers";
export class MyDurableObject extends DurableObject {
async saveContainer() {
const containerSnapshot = await this.ctx.container.snapshotContainer({
name: "before-upgrade",
});
await this.ctx.storage.put("containerSnapshot", containerSnapshot);
}
}import { DurableObject } from "cloudflare:workers";
export class MyDurableObject extends DurableObject {
async saveContainer() {
const containerSnapshot = await this.ctx.container.snapshotContainer({
name: "before-upgrade",
});
await this.ctx.storage.put("containerSnapshot", containerSnapshot);
}
}加载已保存的快照句柄。然后,在启动另一个容器时将其传给 this.ctx.container.start():
import { DurableObject } from "cloudflare:workers";
export class MyDurableObject extends DurableObject {
async restoreContainer() {
const containerSnapshot = await this.ctx.storage.get("containerSnapshot");
if (!containerSnapshot) {
return;
}
this.ctx.container.start({ containerSnapshot, enableInternet: false });
}
}import { DurableObject } from "cloudflare:workers";
export class MyDurableObject extends DurableObject {
async restoreContainer() {
const containerSnapshot =
await this.ctx.storage.get<ContainerSnapshot>("containerSnapshot");
if (!containerSnapshot) {
return;
}
this.ctx.container.start({ containerSnapshot, enableInternet: false });
}
}快照具有隐式的 30 天生存时间。每次恢复都会刷新该生存时间。
目前还不能设置自定义生存时间。
- 调度策略 - 选择如何配置和更新容器实例
- Durable Object Container API - 完整的
ctx.containerAPI 参考 - Container 生命周期 - 了解启动、休眠和关闭行为