OpenClaw All-in-One Docker ๐ฆ
March 17, 2026 ยท View on GitHub
A ready-to-deploy Docker image for OpenClaw, the powerful open-source AI assistant that brings Claude and GPT to your favorite messaging apps. Built for ODIN Fleet and any Docker-compatible platform.
Features:
- Zero-config startup โ auto-configures on first run
- HTTPS support with auto-generated or custom certificates
- Supports Anthropic, OpenAI, and Google Gemini APIs
- Connect WhatsApp, Telegram, Discord, Slack, and more
- Persistent storage for seamless container restarts
Quick Start
# 1. Configure
cp .env.example .env
# Edit .env: set your API key and gateway auth (password or token)
# 2. Build & start
docker compose up -d --build
# 3. Access Control UI
# With password: https://localhost:18789 (enter password when prompted)
# With token: https://localhost:18789/?token=YOUR_TOKEN
Data Persistence
OpenClaw stores all configuration and state in /home/node/.openclaw inside the container. This directory must be mounted as a volume to prevent data loss when the container is recreated.
volumes:
- ./data:/home/node/.openclaw
This folder contains:
openclaw.jsonโ main configuration (gateway settings, API keys, TLS config)- Channel credentials (WhatsApp sessions, bot tokens, etc.)
- Auto-generated TLS certificates (if enabled)
Environment Variables
| Variable | Purpose | Default |
|---|---|---|
OPENCLAW_GATEWAY_HOST | Gateway public IP/FQDN | localhost |
OPENCLAW_GATEWAY_PORT | Gateway port | 18789 |
OPENCLAW_GATEWAY_PASSWORD | Gateway password (user-friendly) | - |
OPENCLAW_GATEWAY_TOKEN | Gateway token (machine-friendly) | Auto-generated |
ANTHROPIC_API_KEY | Anthropic API key | - |
OPENAI_API_KEY | OpenAI API key | - |
GEMINI_API_KEY | Google Gemini API key | - |
OPENCLAW_AUTH_CHOICE | Auth provider if no API key | skip |
OPENCLAW_TLS_ENABLED | Enable HTTPS | false |
OPENCLAW_SKIP_ONBOARD | Skip auto-setup (for OAuth) | false |
OPENCLAW_MODEL | AI model to use | Auto-detected |
OPENCLAW_AUTO_UPDATE | Auto-update on startup | false |
OPENCLAW_UPDATE_CHANNEL | Update channel | stable |
OPENCLAW_SSH_ENABLED | Enable SSH server | false |
OPENCLAW_SSH_PORT | SSH server port | 22 |
OPENCLAW_SSH_AUTHORIZED_KEYS | SSH public keys (one per line) | - |
Auth modes: Set
OPENCLAW_GATEWAY_PASSWORDfor password auth, orOPENCLAW_GATEWAY_TOKENfor token auth. If neither is set, a token is auto-generated and printed in the logs.
TLS / HTTPS
Set OPENCLAW_TLS_ENABLED=true to enable HTTPS with an auto-generated self-signed certificate.
Custom certificates (mounted):
volumes:
- ./certs/cert.pem:/certs/cert.pem:ro
- ./certs/key.pem:/certs/key.pem:ro
Docker Secrets:
secrets:
- tls_cert
- tls_key
Disable TLS:
environment:
- OPENCLAW_TLS_ENABLED=false
SSH Access
Enable SSH for remote access and debugging. Uses public key authentication only (no passwords).
environment:
- OPENCLAW_SSH_ENABLED=true
- OPENCLAW_SSH_AUTHORIZED_KEYS=ssh-ed25519 AAAA... user@host
ports:
- "2222:22"
Multiple keys (via environment):
environment:
- OPENCLAW_SSH_ENABLED=true
- |
OPENCLAW_SSH_AUTHORIZED_KEYS=
ssh-ed25519 AAAA... user1@host
ssh-rsa AAAA... user2@host
Via mounted file:
volumes:
- ./authorized_keys:/ssh/authorized_keys:ro
Via Docker secret:
secrets:
- ssh_authorized_keys
Then connect: ssh -p 2222 node@<host>
OAuth (Claude.ai / Codex)
# 1. Interactive setup
docker compose run --rm openclaw openclaw onboard
# 2. Set OPENCLAW_SKIP_ONBOARD=true in .env
# 3. Start
docker compose up -d
Adding Channels
# WhatsApp (shows QR code)
docker compose exec -it openclaw openclaw channels login --channel whatsapp
# Telegram
docker compose exec openclaw openclaw channels add --channel telegram --token <BOT_TOKEN>
# Discord
docker compose exec openclaw openclaw channels add --channel discord --token <BOT_TOKEN>
# Slack
docker compose exec openclaw openclaw channels add --channel slack --bot-token <xoxb-...> --app-token <xapp-...>
CLI
docker compose exec openclaw openclaw health
docker compose exec openclaw openclaw channels list
docker compose exec openclaw openclaw <command>
Updating
Auto-update on startup
Set OPENCLAW_AUTO_UPDATE=true to automatically run openclaw update every time the container starts. This keeps OpenClaw at the latest version without rebuilding the image.
OPENCLAW_AUTO_UPDATE=true
You can also choose a release channel (stable, beta, or dev):
OPENCLAW_UPDATE_CHANNEL=beta
Manual update
docker compose pull
docker compose up -d
Or rebuild from source:
docker compose build --no-cache
docker compose up -d
Troubleshooting
docker compose logs -f # View logs
rm -rf ./data && docker compose up -d # Reset and re-run setup
Permission denied on ./data directory:
If you see EACCES: permission denied errors for /home/node/.openclaw/openclaw.json, fix the data directory permissions:
sudo chown -R 1000:1000 ./data
The node user inside the container has UID 1000. This is common on Linux hosts where Docker creates the directory as root.