OpenClaw Docker↗ Bright Coding Blog Images: Stop Wrestling with AI Agent Setup
What if deploying a fully-featured AI agent took 30 seconds instead of 3 days?
Every developer who's tried to run browser-based AI agents locally knows the nightmare. Dependency hell. Conflicting Python↗ Bright Coding Blog versions. Chrome DevTools Protocol mysteries. Authentication flows that break between restarts. You spend more time debugging your infrastructure than actually building with the agent. I've watched teams burn entire sprints just getting OpenClaw to run consistently across laptops, staging, and production.
The secret weapon top developers are quietly adopting? Automated, production-ready Docker images that eliminate this friction entirely.
Enter coollabsio/openclaw — a meticulously engineered containerization solution that transforms OpenClaw deployment from a configuration marathon into a single docker run command. Built by the same team behind the popular Coolify platform, this isn't a hacky wrapper. It's a two-layer build system with automated release tracking, multi-architecture support, and enterprise-grade environment configuration that handles everything from API key management to browser session persistence.
In this deep dive, I'll expose exactly how this repository solves the hardest deployment problems, walk through real production configurations, and show you why developers are abandoning manual OpenClaw setups en masse. Whether you're running Claude, GPT, or local Ollama models, this changes everything.
What Is OpenClaw — And Why Containerization Changes Everything
OpenClaw is a powerful open-source framework for building browser-based AI agents — autonomous systems that can navigate websites, interact with UIs, execute code, and integrate with messaging platforms like Telegram, Discord, Slack, and WhatsApp. Think of it as giving large language models hands, eyes, and persistent memory across the web.
The project coollabsio/openclaw on GitHub doesn't modify OpenClaw's core. Instead, it solves the deployment and operational layer that the upstream project leaves as an exercise for the user. Created by Andras Bacsai and the Cool Labs team, this repository provides fully automated Docker image builds that track OpenClaw's rapid release cycle.
Why it's trending now: OpenClaw's upstream uses CalVer with roughly daily releases (v2026.1.29 format). Manually rebuilding images for each release is unsustainable. The coollabsio/openclaw repository eliminates this entirely with a GitHub Actions workflow that checks for new releases every 6 hours, builds multi-arch images (AMD64 + ARM64), and publishes to Docker Hub automatically. For teams running production agent infrastructure, this is the difference between staying current and falling behind.
The repository's architecture reveals serious engineering discipline:
- Two-layer build system: A
Dockerfile.basecompiles OpenClaw from source with all build dependencies; a finalDockerfilelayers on nginx reverse proxy and configuration tooling - Persistent state management: The
/datavolume preserves agent configuration, workspace files, and runtime state across container restarts - Environment-driven configuration: Every aspect — from AI provider selection to Telegram bot settings — is controlled via environment variables, enabling GitOps-friendly deployments
- Built-in security: HTTP basic auth via nginx, configurable gateway tokens, and CORS origin restrictions
This isn't a community fork that drifts from upstream. It's a distribution layer that makes OpenClaw actually deployable at scale.
Key Features That Eliminate Deployment Pain
The coollabsio/openclaw images pack capabilities that would take weeks to replicate manually. Here's what separates this from generic "Dockerize anything" approaches:
Multi-Provider AI Support (18+ Providers, Zero Config Files)
The container accepts API keys for virtually every major AI provider through environment variables: Anthropic (Claude), OpenAI (GPT), Google (Gemini), OpenRouter, xAI (Grok), Groq, Mistral, Cerebras, and more. The configure.js script automatically prioritizes providers (Anthropic → OpenAI → OpenRouter → ...) and generates the correct openclaw.json structure. Remove a key, restart the container, and that provider disappears cleanly — no manual JSON editing.
Browser Automation with Session Persistence
The killer feature for web agents: integrated Chrome DevTools Protocol (CDP) support via a browser sidecar. The recommended kasmweb/chrome container provides:
- Full Chrome desktop accessible via noVNC at
:6901for manual login flows (OAuth, 2FA, captchas) - CDP connection at
:9222that OpenClaw reuses for automated navigation - Persistent profile storage across container restarts via volume mounts
This solves the "login wall" problem that breaks most headless browser automation.
Messaging Platform Integrations (5 Channels, 50+ Config Options)
Native support for Telegram, Discord, Slack, WhatsApp, and webhooks — each with granular permission controls, rate limiting, and message formatting options. The environment variable schema covers everything from Discord reaction policies to WhatsApp read receipt behavior.
Production-Ready Operational Features
- Automated builds: Cron-triggered every 6 hours, plus manual dispatch with force-rebuild options
- Multi-architecture: Native ARM64 builds using GitHub's
ubuntu-24.04-armrunners (same pattern as their PocketBase images) - Smoke testing:
scripts/smoke.jsvalidates each image before publication - Health endpoints:
/healthzbypasses auth for monitoring systems - Webhook automation: Optional hooks endpoint for external triggers (
/hooks/wake,/hooks/agent)
Developer Experience Enhancements
- Linuxbrew, Go, uv pre-installed: Common skill dependencies ready immediately
- Runtime package installation:
OPENCLAW_DOCKER_APT_PACKAGESfor one-off dependencies - Custom init scripts:
OPENCLAW_DOCKER_INIT_SCRIPTfor startup customization - Dot-notation config override:
OPENCLAW__channels__telegram__customSetting=valuefor edge cases
Real-World Use Cases Where OpenClaw Docker Shines
1. Autonomous Web Research Agent
Deploy an agent that navigates paywalled research sites, extracts data, and summarizes findings to Slack. The browser sidecar handles login flows that would break pure-API approaches. Persistent /data volume ensures the agent remembers search history and credentials across restarts.
2. Multi-Platform Customer Support Bot
Run a single OpenClaw instance connected to Telegram, Discord, and WhatsApp simultaneously. The granular permission controls let you expose different capabilities per platform — extensive actions in private DMs, restricted read-only in public groups.
3. CI/CD Pipeline with Browser Testing
Integrate OpenClaw into GitHub Actions for end-to-end testing of SPAs. The containerized browser with VNC access lets developers debug failures by replaying the exact session that failed.
4. Local Development Environment for Agent Builders
Instead of installing OpenClaw's complex dependency chain (Go, Python, Chrome, build tools) directly on your laptop, run the full stack↗ Bright Coding Blog in Docker. The OPENCLAW_ALLOWED_ORIGINS setting enables your local React/Vue dev server to communicate with the gateway seamlessly.
5. Air-Gapped Enterprise Deployment with Ollama
Connect to local Ollama instances via OLLAMA_BASE_URL=http://host.docker.internal:11434 — no external API keys required. The nginx auth layer satisfies security requirements for internal tools.
Step-by-Step Installation & Setup Guide
Prerequisites
- Docker 20.10+ or Docker Desktop
- Docker Compose v2 (for full setup)
- At least one AI provider API key
Minimal Deployment (Single Container)
The fastest path to a running agent:
# Pull and run with essential configuration
docker run -d \
--name openclaw \
-p 8080:8080 \
-e ANTHROPIC_API_KEY=sk-ant-... \
-e AUTH_PASSWORD=changeme \
-e OPENCLAW_GATEWAY_TOKEN=my-secret-token \
-e OPENCLAW_ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000 \
-v openclaw-data:/data \
coollabsio/openclaw:latest
Critical parameters explained:
| Flag | Purpose |
|---|---|
-p 8080:8080 |
Exposes nginx reverse proxy (proxies to internal gateway at :18789) |
-e ANTHROPIC_API_KEY |
Primary AI provider; falls through to others if unset |
-e AUTH_PASSWORD |
Enables HTTP basic auth on all routes except /healthz |
-e OPENCLAW_GATEWAY_TOKEN |
Bearer token for API access; auto-generated if omitted |
-e OPENCLAW_ALLOWED_ORIGINS |
Required for CORS — set to your frontend's origin |
-v openclaw-data:/data |
Persists state, config, and workspace across restarts |
Verify deployment:
# Check container health
docker ps | grep openclaw
# View logs
docker logs -f openclaw
# Test health endpoint (no auth required)
curl http://localhost:8080/healthz
Full Production Setup (Docker Compose)
For browser automation and persistent infrastructure, use the included docker-compose.yml:
# Clone or create the compose configuration
git clone https://github.com/coollabsio/openclaw.git
cd openclaw
# Copy and customize environment
cp .env.example .env
# Edit .env with your API keys and settings
# Start all services
docker compose up -d
Post-start access points:
| Service | URL | Credentials |
|---|---|---|
| OpenClaw UI | http://localhost:8080 |
AUTH_USERNAME / AUTH_PASSWORD |
| Browser Desktop | http://localhost:8080/browser/ |
AUTH_USERNAME / browser PASSWORD |
| noVNC (direct) | https://localhost:6901 |
kasm_user / browser password |
Environment Configuration Best Practices
Create a .env file for sensitive values:
# Core AI provider (set at least one)
ANTHROPIC_API_KEY=sk-ant-api03-...
OPENAI_API_KEY=sk-proj-...
# Security (never use default in production)
AUTH_USERNAME=admin
AUTH_PASSWORD=$(openssl rand -base64 32)
OPENCLAW_GATEWAY_TOKEN=$(openssl rand -hex 32)
# CORS — critical for web UI access
OPENCLAW_ALLOWED_ORIGINS=https://app.yourdomain.com,http://localhost:5173
# Optional: Telegram integration
TELEGRAM_BOT_TOKEN=123456:ABC-DEF...
TELEGRAM_DM_POLICY=pairing
# Optional: Browser sidecar connection
BROWSER_CDP_URL=http://browser:9222
REAL Code Examples from the Repository
Let's examine actual implementations from the coollabsio/openclaw repository to understand how this system works under the hood.
Example 1: Minimal Docker Run Configuration
This is the exact quick-start command from the README, annotated with critical implementation details:
# The official minimal deployment — every flag is load-bearing
docker run -d \
--name openclaw \
-p 8080:8080 \
-e ANTHROPIC_API_KEY=sk-ant-... \
-e AUTH_PASSWORD=changeme \
-e OPENCLAW_GATEWAY_TOKEN=my-secret-token \
-e OPENCLAW_ALLOWED_ORIGINS=http://localhost:5173,http://localhost:3000 \
-v openclaw-data:/data \
coollabsio/openclaw:latest
What's happening here: The -d daemonizes the container. Port 8080 exposes nginx, which reverse-proxies to the OpenClaw gateway on internal port 18789. The ANTHROPIC_API_KEY triggers automatic Claude model configuration — the configure.js script writes this to openclaw.json with Anthropic as primary provider. The AUTH_PASSWORD enables nginx's basic auth module; without it, your gateway is completely open. Most critically, OPENCLAW_ALLOWED_ORIGINS is required for CORS — without this, browser-based UIs on different origins cannot communicate with the API. The named volume openclaw-data ensures your agent's memory survives container recreation.
Example 2: Docker Compose Full Stack
The repository's docker-compose.yml demonstrates production patterns:
# One command for complete infrastructure with browser sidecar
docker compose up -d
Architecture revealed: This launches multiple services — the main OpenClaw container, a browser sidecar (kasmweb/chrome), and potentially webhook receivers. The compose network enables internal DNS resolution (http://browser:9222). Volumes are explicitly defined for /data (OpenClaw state) and browser profiles. After startup, the browser desktop at http://localhost:8080/browser/ lets you manually authenticate to sites — OpenClaw then reuses these sessions via CDP for automated tasks.
Example 3: Environment-Driven Configuration System
The scripts/configure.js implements a sophisticated merge strategy. Here's how to use the dot-notation fallback for uncovered settings:
# Standard env vars for common settings
TELEGRAM_BOT_TOKEN=your-token
TELEGRAM_TEXT_CHUNK_LIMIT=4000
# Dot-notation ONLY for edge cases not covered by dedicated vars
OPENCLAW__channels__telegram__customSetting=value
OPENCLAW__channels__discord__customSetting=value
Precedence hierarchy (highest wins): OPENCLAW_CONFIG_JSON > OPENCLAW__* dot-notation > dedicated env vars > custom JSON mount > persisted config. This design lets teams use simple env vars for 95% of configuration, while power users can inject arbitrary JSON structures. The [] suffix denotes arrays with comma-separated values. Auto-typing converts true/false to booleans, integers to numbers — no manual JSON quoting required.
Example 4: Custom JSON Config Mount
For complex scenarios exceeding flat env vars:
# Mount a complete custom configuration
docker run -v ./my-openclaw.json:/app/config/openclaw.json ...
# Or override the mount path
-e OPENCLAW_CUSTOM_CONFIG=/app/config/openclaw.json
Three-tier merge order: The configure.js script first loads your custom JSON as base layer, then overlays persisted state from previous runs, then applies environment variables. Arrays are replaced (not concatenated) to prevent config drift. Critical security note: Provider API keys are always read from environment variables, never from JSON files — this prevents accidental credential commits.
Example 5: Browser Sidecar Integration
The CDP connection for persistent browser sessions:
# Required to activate browser automation tool
BROWSER_CDP_URL=http://browser:9222
# Optional: enable JavaScript↗ Bright Coding Blog evaluation in page context
BROWSER_EVALUATE_ENABLED=true
# Optional: customize snapshot mode for efficiency
BROWSER_SNAPSHOT_MODE=efficient
Session persistence workflow: The kasmweb/chrome container runs a full Chrome instance with remote debugging. You connect via noVNC at :6901, log into target sites manually (handling captchas, 2FA, OAuth), and these sessions persist in a mounted volume. OpenClaw connects via BROWSER_CDP_URL and automates within these authenticated contexts. The sidecar needs CHROME_ARGS=--remote-debugging-port=9222 --remote-debugging-address=0.0.0.0 to expose CDP to the Docker network.
Advanced Usage & Best Practices
Security Hardening
- Never expose port 18789 directly — always use nginx on 8080 for auth enforcement
- Generate cryptographically random tokens:
openssl rand -hex 32 - Restrict CORS origins explicitly —
*is not supported; list exact domains - Use
AUTH_PASSWORDin production — the gateway is fully open without it - Rotate
OPENCLAW_GATEWAY_TOKENon team member departures
Performance Optimization
- Mount volumes on fast storage — agent state I/O impacts responsiveness
- Use
BROWSER_SNAPSHOT_MODE=efficientfor reduced bandwidth in headless operation - Set
TELEGRAM_STREAM_MODE=partialfor faster perceived response times - Limit
DISCORD_HISTORY_LIMITandSLACK_HISTORY_LIMITto reduce context window consumption
Multi-Environment Management
# Development
docker run -e OPENCLAW_ALLOWED_ORIGINS=http://localhost:5173 ...
# Staging
docker run -e OPENCLAW_ALLOWED_ORIGINS=https://staging.example.com ...
# Production (with Coolify auto-detection)
docker run -e COOLIFY_FQDN=app.example.com ...
Debugging Failed Starts
# Check configuration parsing errors
docker logs openclaw 2>&1 | grep -i error
# Validate JSON config syntax
docker exec openclaw node -e "JSON.parse(require('fs').readFileSync('/data/.openclaw/openclaw.json'))"
# Inspect generated config
docker exec openclaw cat /data/.openclaw/openclaw.json | jq .
Comparison with Alternatives
| Feature | coollabsio/openclaw |
Manual OpenClaw Install | Generic Docker Image |
|---|---|---|---|
| Build automation | ✅ Auto-tracks upstream releases | ❌ Manual rebuilds | ❌ Static, outdated |
| Multi-arch support | ✅ AMD64 + ARM64 native | ❌ Host-dependent | ⚠️ Often AMD64-only |
| Environment config | ✅ 100+ env vars, auto-typing | ❌ Manual JSON editing | ⚠️ Basic env passthrough |
| Browser sidecar | ✅ Documented, tested pattern | ❌ DIY integration | ❌ Not included |
| Auth/security | ✅ nginx + gateway tokens | ❌ Self-implemented | ⚠️ Inconsistent |
| Messaging channels | ✅ 5 platforms, 50+ options | ❌ Manual setup | ❌ Not pre-configured |
| State persistence | ✅ Designed for /data volume |
⚠️ Ad-hoc | ⚠️ Often ephemeral |
| Coolify integration | ✅ Auto-detected FQDN | ❌ None | ❌ None |
When to choose alternatives: Manual installation suits contributors modifying OpenClaw's core. Generic images work for throwaway experiments. For production agent infrastructure, coollabsio/openclaw is the clear operational winner.
FAQ: Common Developer Concerns
Q: Do I need an Anthropic key specifically, or will other providers work?
Any supported provider works — OpenAI, Gemini, OpenRouter, Groq, and 13 others. Anthropic is listed first due to priority ordering, but the container auto-configures whichever key you provide. Multiple keys enable fallback providers.
Q: Why is OPENCLAW_ALLOWED_ORIGINS required?
Without CORS configuration, browser-based UIs on different origins cannot call the gateway API. Set this to your frontend's exact origin — http://localhost:5173 for Vite dev servers, http://localhost:3000 for Next.js↗ Bright Coding Blog, or your production domain.
Q: How do I persist data across container updates?
Use a named volume (-v openclaw-data:/data) or bind mount to a host directory. The /data path stores .openclaw/ (state/config) and workspace/ (projects). This survives docker rm and image updates.
Q: Can I run this on Apple Silicon (M1/M2/M3)?
Yes — ARM64 builds use native GitHub Actions runners, not QEMU emulation. Performance matches AMD64 deployments. The kasmweb/chrome sidecar also supports ARM64.
Q: How do automated updates work?
The .github/workflows/auto-update.yml runs every 6 hours via cron. It checks OpenClaw's GitHub releases API, skips if the version is already built, otherwise triggers multi-arch builds and manifest merges. You can also force rebuild via workflow_dispatch.
Q: What's the difference between coollabsio/openclaw and coollabsio/openclaw-base?
openclaw-base contains the compiled OpenClaw binary and runtime dependencies. openclaw (final image) adds nginx, configuration scripts, and entrypoint logic. Most users only need the final image.
Q: How do I add custom system packages?
Use OPENCLAW_DOCKER_APT_PACKAGES=ffmpeg build-essential for apt-available tools, or OPENCLAW_DOCKER_INIT_SCRIPT for complex setup. For permanent additions, fork and modify Dockerfile.base.
Conclusion: The Deployment Layer OpenClaw Desperately Needed
OpenClaw is a remarkable framework for browser-based AI agents, but its power is locked behind significant operational complexity. The coollabsio/openclaw repository is the key that unlocks it — transforming a multi-day setup process into minutes of environment variable configuration.
What impresses me most is the engineering discipline: the two-layer build system, the 6-hour auto-update cycle, the sophisticated configuration merge logic, and the thoughtful security defaults. This isn't a quick hack; it's infrastructure designed for teams running agents in production.
If you're currently maintaining a manual OpenClaw installation, you're spending cycles on problems this repository has already solved. If you're evaluating agent frameworks, the deployment simplicity here removes a major adoption barrier.
Ready to deploy? Head to github.com/coollabsio/openclaw, grab the docker-compose.yml, and have your first agent running before your coffee gets cold. The future of autonomous browser agents is containerized — and it's already here.
Have you deployed OpenClaw in production? What integration patterns worked best? Share your experience — the agent infrastructure community is still writing the playbook.