[ PROMPT_NODE_24034 ]
Containers 说明文档
[ SKILL_DOCUMENTATION ]
# Cloudflare 容器技能参考
**适用范围:仅限 Cloudflare 容器 - 非通用 Cloudflare Workers**
在处理 Cloudflare 容器时使用:在 Workers 平台上部署容器化应用、配置支持容器的 Durable Objects、管理容器生命周期或实现有状态/无状态容器模式。
## Beta 状态
⚠️ 容器功能目前处于 **beta** 阶段。API 可能随时更改,恕不另行通知。无 SLA 保证。自定义实例类型于 2026 年 1 月添加。
## 核心概念
**容器即 Durable Object:** 每个容器都是一个具有持久身份的 Durable Object。通过 `getByName(id)` 或 `getRandom()` 访问。
**镜像部署:** 镜像在全球范围内预获取。部署使用滚动策略(不像 Workers 那样即时)。
**生命周期:** 冷启动 (2-3s) → 运行中 → `sleepAfter` 超时 → 停止。无自动扩缩容 - 通过 `getRandom()` 进行手动负载均衡。
**持久身份,临时磁盘:** 容器 ID 持久存在,但磁盘在停止时重置。请使用 Durable Object 存储以实现持久化。
## 快速入门
typescript
import { Container } from "@cloudflare/containers";
export class MyContainer extends Container {
defaultPort = 8080;
sleepAfter = "30m";
}
export default {
async fetch(request: Request, env: Env) {
const container = env.MY_CONTAINER.getByName("instance-1");
await container.startAndWaitForPorts();
return container.fetch(request);
}
};
## 阅读顺序
| 任务 | 文件 |
|------|-------|
| 设置新容器项目 | README → configuration.md |
| 实现容器逻辑 | README → api.md → patterns.md |
| 选择路由模式 | patterns.md (路由部分) |
| 调试问题 | gotchas.md |
| 生产环境加固 | gotchas.md → patterns.md (生命周期) |
## 路由决策树
**请求应如何到达容器?**
- **同一用户/会话 → 同一容器:** 使用 `getByName(sessionId)` 实现会话亲和性
- **无状态,分摊负载:** 使用 `getRandom()` 进行负载均衡
- **每个容器一个任务:** 使用 `getByName(jobId)` + 显式生命周期管理
- **单个全局实例:** 使用 `getByName("singleton")`
## 何时使用容器 vs Workers
**在以下情况使用容器:**
- 需要有状态、长生命周期的进程(会话、WebSocket、游戏)
- 运行现有的容器化应用(Node.js、Python、自定义二进制文件)
- 需要文件系统访问或特定的系统依赖
- 具有专用计算资源的每用户/会话隔离
**在以下情况使用 Workers:**
- 无状态 HTTP 处理程序
- 亚毫秒级响应