Setting the file. One moment.
Chapter 04 · Cloudflare Deploy
Subchapter 4.184
references/sandbox/configuration.mdMarkdown3 KBView on GitHub
const sandbox = getSandbox(env.Sandbox, 'sandbox-id', {
normalizeId: true, // lowercase ID (required for preview URLs)
sleepAfter: '10m', // sleep after inactivity: '5m', '1h', '2d' (default: '10m')
keepAlive: false, // false = auto-timeout, true = never sleep
containerTimeouts: {
instanceGetTimeoutMS: 30000, // 30s for provisioning (default: 30000)
portReadyTimeoutMS: 90000 // 90s for container startup (default: 90000)
}
});Sleep Config:
sleepAfter: Duration string (e.g., ‘5m’, ‘10m’, ‘1h’) - default: ‘10m’keepAlive: false: Auto-sleep (default, cost-optimized)keepAlive: true: Never sleep (higher cost, requires explicit destroy())wrangler.jsonc instance_type:
lite: 256MB RAM, 0.5 vCPU (default)standard: 512MB RAM, 1 vCPUheavy: 1GB RAM, 2 vCPUBasic:
FROM docker.io/cloudflare/sandbox:latest
RUN pip3 install --no-cache-dir pandas numpy
EXPOSE 8080 # Required for wrangler devScientific:
FROM docker.io/cloudflare/sandbox:latest
RUN pip3 install --no-cache-dir \
jupyter-server ipykernel matplotlib \
pandas seaborn plotly scipy scikit-learnNode.js:
FROM docker.io/cloudflare/sandbox:latest
RUN npm install -g typescript ts-nodeCRITICAL: EXPOSE required for wrangler dev port access. Production auto-exposes all ports.
# Dev
wrangler dev # Start local dev server
wrangler deploy # Deploy to production
wrangler tail # Monitor logs
wrangler containers list # Check container status
wrangler secret put KEY # Set secretwrangler.jsonc:
{
"vars": {
"ENVIRONMENT": "production",
"API_URL": "https://api.example.com"
},
"r2_buckets": [{
"binding": "DATA_BUCKET",
"bucket_name": "my-data-bucket"
}]
}Usage:
const token = env.GITHUB_TOKEN; // From wrangler secret
await sandbox.exec('git clone ...', {
env: { GIT_TOKEN: token }
});Prerequisites:
*.yourdomain.com → worker.yourdomain.com.workers.dev domains NOT supportednormalizeId: true in getSandboxproxyToSandbox() called first in fetch handler{
"triggers": {
"crons": ["*/5 * * * *"] // Every 5 minutes
}
}export default {
async scheduled(event: ScheduledEvent, env: Env) {
const sandbox = getSandbox(env.Sandbox, 'main');
await sandbox.exec('echo "keepalive"'); // Wake sandbox
}
};wrangler.jsonc:
{
"vars": {
"SANDBOX_LOG_LEVEL": "debug", // debug | info | warn | error (default: info)
"SANDBOX_LOG_FORMAT": "pretty" // json | pretty (default: json)
}
}Dev: debug + pretty. Production: info/warn + json.
Override default timeouts via environment variables:
{
"vars": {
"SANDBOX_INSTANCE_TIMEOUT_MS": "60000", // Override instanceGetTimeoutMS
"SANDBOX_PORT_TIMEOUT_MS": "120000" // Override portReadyTimeoutMS
}
}