调度策略决定你在何处配置 Container 镜像和实例规格。它也决定镜像更新和滚动发布如何应用。在创建 Container 应用时选择该策略。
| 策略 | 配置镜像和实例规格 | 镜像更新 | 最适合 |
|---|---|---|---|
default |
在 Wrangler 配置中 | Cloudflare 使用滚动发布应用应用范围的配置变更 | 所有实例使用相同镜像和实例规格的服务 |
durable_object(Beta) |
在 Durable Object 代码中调用 ctx.container.start() 时 |
应用代码每次启动实例时选择镜像 | 沙盒、agent 环境以及其他需要按实例配置的工作负载 |
一份 Wrangler 配置可以同时包含两种策略的应用。这让 Worker 可以同时使用中心管理的服务 Containers 和由 Durable Object 管理的沙盒。
调度策略不可变。要使用不同策略,请创建新的 Container 应用。删除应用也会删除其容器实例,因此切换策略意味着替换每个正在运行的实例。要迁移现有应用,请参阅迁移到 Durable Object 调度策略。
使用 default 策略时,Wrangler 配置定义一个应用范围的 image、一个 instance_type,以及 max_instances 等设置。省略 scheduling_policy 会选择 default。
{
"containers": [
{
"class_name": "ApiContainer",
"scheduling_policy": "default",
"image": "./api/Dockerfile",
"instance_type": "standard-1",
"max_instances": 5,
},
],
}[[containers]]
class_name = "ApiContainer"
scheduling_policy = "default"
image = "./api/Dockerfile"
instance_type = "standard-1"
max_instances = 5当你更改镜像或实例类型并部署时,Cloudflare 会在整个应用中推出该变更。请参阅滚动发布。
durable_object 策略将按实例的决策移入你的 Durable Object。Wrangler 将 Container 应用与 Durable Object 类关联,你的代码向 ctx.container.start() 提供启动镜像或快照以及可选的实例规格。
配置该策略。要使用自定义镜像,请添加 Durable Object 可以启动的镜像:
{
"name": "agent-computer",
"main": "src/index.ts",
"upload_source_maps": true,
"compatibility_date": "2026-09-29",
"containers": [
{
"class_name": "AgentComputer",
"scheduling_policy": "durable_object",
"images": {
"base": {
"dockerfile": "./container/Dockerfile",
},
},
},
],
"durable_objects": {
"bindings": [
{
"name": "AGENT_COMPUTER",
"class_name": "AgentComputer",
},
],
},
"exports": {
"AgentComputer": {
"type": "durable-object",
"storage": "sqlite",
},
},
}name = "agent-computer"
main = "src/index.ts"
upload_source_maps = true
compatibility_date = "2026-09-29"
[[containers]]
class_name = "AgentComputer"
scheduling_policy = "durable_object"
[containers.images.base]
dockerfile = "./container/Dockerfile"
[[durable_objects.bindings]]
name = "AGENT_COMPUTER"
class_name = "AgentComputer"
[exports.AgentComputer]
type = "durable-object"
storage = "sqlite"Wrangler 会构建或解析每个具名镜像,为 Containers 运行时做好准备,并在 ctx.container.images 上公开其按 digest 固定的引用。Durable Object 启动其 Container 时,选择镜像和实例规格:
import { DurableObject } from "cloudflare:workers";
export class AgentComputer extends DurableObject {
startContainer() {
if (this.ctx.container.running) {
return;
}
this.ctx.container.start({
image: this.ctx.container.images.base,
instance: "standard-2",
enableInternet: false,
});
}
}import { DurableObject } from "cloudflare:workers";
export class AgentComputer extends DurableObject {
startContainer() {
if (this.ctx.container.running) {
return;
}
this.ctx.container.start({
image: this.ctx.container.images.base,
instance: "standard-2",
enableInternet: false,
});
}
}ctx.container.start() 会发起启动,并在 Container 准备好接受请求之前返回。在发送流量或调用 exec() 之前,请添加应用特定的就绪检查。
durable_object 策略不支持 max_instances。正在运行的实例会计入你的账户限制。
如果你不需要自定义镜像,可以直接启动 cloudflare/debian-trixie Cloudflare 托管镜像,而无需在 Wrangler 中添加具名镜像。它在 Debian Trixie slim 上包含 Node.js 24.20.0:
this.ctx.container.start({
image: "cloudflare/debian-trixie",
instance: "standard-2",
enableInternet: false,
});this.ctx.container.start({
image: "cloudflare/debian-trixie",
instance: "standard-2",
enableInternet: false,
});Wrangler 配置中 containers[].images 下的每个键都会成为 ctx.container.images 上的属性。例如,Durable Object 可以通过 ctx.container.images.base 使用 containers[].images.base。每个值必须恰好指定一个镜像源。对 Dockerfile 路径使用 dockerfile。运行 wrangler deploy 时,Wrangler 会构建并上传该镜像。你也可以为该镜像设置 build_context 和 build_vars。
对 Cloudflare 托管 registry 中按 digest 固定的镜像使用 image。使用 registry.cloudflare.com/<ACCOUNT_ID>/<REPOSITORY>@sha256:<DIGEST> 形式。不支持直接引用 Docker Hub、Amazon ECR 或 Google Artifact Registry。要使用其他 registry 中的镜像,请先将其推送到 Cloudflare 托管 registry。
一份配置最多可以包含 100 个具名镜像。镜像名称必须包含 1 到 128 个字符。
镜像映射会随 Worker 版本一起上传。更新映射不会重启或替换正在运行的容器实例。应用在启动实例时从映射中选择镜像。在渐进式部署期间,ctx.container.images 反映运行该 Durable Object 的 Worker 版本的镜像映射,因此在部署完成前,不同 Durable Object 可以启动不同镜像。
在 ctx.container.start() 中将 instance 设置为以下具名实例类型之一:
litestandard-1standard-2standard-3standard-4
运行时不接受 basic 或旧版 dev 和 standard 别名。
如果省略 instance,Container 使用 lite。你也可以提供满足自定义实例类型约束 的自定义实例对象:
this.ctx.container.start({
image: this.ctx.container.images.base,
enableInternet: false,
instance: {
vcpu: 1,
memoryMib: 4096,
diskMb: 8000,
},
});this.ctx.container.start({
image: this.ctx.container.images.base,
enableInternet: false,
instance: {
vcpu: 1,
memoryMib: 4096,
diskMb: 8000,
},
});运行时使用 camel case(memoryMib 和 diskMb)。Wrangler 应用级的 instance_type 对象使用 snake case(memory_mib 和 disk_mb),并且仅适用于 default 策略。
对于新文件系统,将 image 传给 ctx.container.start()。要恢复完整文件系统快照,改为传递 containerSnapshot。image 和 containerSnapshot 互斥,因为快照已经标识要恢复的文件系统。
快照仅在 durable_object 策略下受支持。快照绑定到创建它时所基于的镜像。更新镜像后,请从运行该镜像的 Containers 创建新快照。
完整的保存和恢复流程请参阅快照。
使用 durable_object 策略的容器实例不参与应用范围的镜像滚动发布。正在运行的实例会继续使用其启动镜像。应用决定何时停止该实例并用另一个已配置镜像启动它。比较正在运行的镜像与已配置镜像的示例,请参阅推出具名镜像更新。
durable_object 策略支持 ssh 和 authorized_keys 字段。请参阅 SSH。