Chapter 04 · Cloudflare Deploy
Subchapter 4.66
references/containers/README.mdMarkdown3 KBView on GitHub
APPLIES TO: Cloudflare Containers ONLY - NOT general Cloudflare Workers
Use when working with Cloudflare Containers: deploying containerized apps on Workers platform, configuring container-enabled Durable Objects, managing container lifecycle, or implementing stateful/stateless container patterns.
⚠️ Containers is currently in beta. API may change without notice. No SLA guarantees. Custom instance types added Jan 2026.
Container as Durable Object: Each container is a Durable Object with persistent identity. Accessed via getByName(id) or getRandom().
Image deployment: Images pre-fetched globally. Deployments use rolling strategy (not instant like Workers).
Lifecycle: cold start (2-3s) → running → sleepAfter timeout → stopped. No autoscaling - manual load balancing via getRandom().
Persistent identity, ephemeral disk: Container ID persists, but disk resets on stop. Use Durable Object storage for persistence.
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);
}
};| Task | Files |
|---|---|
| Setup new container project | README → configuration.md |
| Implement container logic | README → api.md → patterns.md |
| Choose routing pattern | patterns.md (routing section) |
| Debug issues | gotchas.md |
| Production hardening | gotchas.md → patterns.md (lifecycle) |
How should requests reach containers?
getByName(sessionId) for session affinitygetRandom() for load balancinggetByName(jobId) + explicit lifecycle managementgetByName("singleton")Use Containers when:
Use Workers when: