[ PROMPT_NODE_24036 ]
Containers API 参考
[ SKILL_DOCUMENTATION ]
## 容器类 API
typescript
import { Container } from "@cloudflare/containers";
export class MyContainer extends Container {
defaultPort = 8080;
requiredPorts = [8080];
sleepAfter = "30m";
enableInternet = true;
pingEndpoint = "/health";
envVars = {};
entrypoint = [];
onStart() { /* 容器已启动 */ }
onStop() { /* 容器正在停止 */ }
onError(error: Error) { /* 容器错误 */ }
onActivityExpired(): boolean { /* 超时,返回 true 以保持存活 */ }
async alarm() { /* 定时任务 */ }
}
## 路由
**getByName(id)** - 用于会话亲和性、每用户状态的命名实例
**getRandom()** - 用于无状态服务负载均衡的随机实例
typescript
const container = env.MY_CONTAINER.getByName("user-123");
const container = env.MY_CONTAINER.getRandom();
## 启动方法
### start() - 基础启动(8秒超时)
typescript
await container.start();
await container.start({ envVars: { KEY: "value" } });
在 **进程启动** 时返回,而不是在端口就绪时。适用于“触发即忘”场景。
### startAndWaitForPorts() - 推荐(20秒超时)
typescript
await container.startAndWaitForPorts(); // 使用 requiredPorts
await container.startAndWaitForPorts({ ports: [8080, 9090] });
await container.startAndWaitForPorts({
ports: [8080],
startOptions: { envVars: { KEY: "value" } }
});
在 **端口监听** 时返回。在 HTTP/TCP 请求之前使用。
**端口解析:** 显式端口 → requiredPorts → defaultPort → 端口 33
### waitForPort() - 等待特定端口
typescript
await container.waitForPort(8080);
await container.waitForPort(8080, { timeout: 30000 });
## 通信
### fetch() - 支持 WebSocket 的 HTTP
typescript
// ✅ 支持 WebSocket 升级
const response = await container.fetch(request);
const response = await container.fetch("http://container/api", {
method: "POST",
body: JSON.stringify({ data: "value" })
});
**用途:** 所有 HTTP,特别是 WebSocket。
### containerFetch() - 仅 HTTP(不支持 WebSocket)
typescript
// ❌ 不支持 WebSocket
const response = await container.containerFetch(request);
**⚠️ 关键:** WebSocket 请使用 `fetch()`,不要使用 `containerFetch()`。
### TCP 连接
typescript
const port = this.ctx.container.getTcpPort(8080);
const conn = port.connect();
await conn.opened;
if (request.body) await request.body.pipeTo(conn.writable);
return new Response(conn.readable);
### switchPort() - 更改默认端口