
fourplayers/openclaw # 2. Build & start docker compose up -d --build # 3. Access Control UI # With password: https://localhost:*** (enter password when prompted) # With token: https://localhost:***/?token=YOUR_TOKEN
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.
yamlvolumes: - ./data:/home/node/.openclaw
This folder contains:
openclaw.json — main configuration (gateway settings, API keys, TLS config)| Variable | Purpose | Default |
|---|---|---|
OPENCLAW_GATEWAY_HOST | Gateway public IP/FQDN | localhost |
OPENCLAW_GATEWAY_PORT | Gateway port | *** |
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 | - |
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_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.
Set OPENCLAW_TLS_ENABLED=true to enable HTTPS with an auto-generated self-signed certificate.
Custom certificates (mounted):
yamlvolumes: - ./certs/cert.pem:/certs/cert.pem:ro - ./certs/key.pem:/certs/key.pem:ro
Docker Secrets:
yamlsecrets: - tls_cert - tls_key
Disable TLS:
yamlenvironment: - OPENCLAW_TLS_ENABLED=false
Enable SSH for remote access and debugging. Uses public key authentication only (no passwords).
yamlenvironment: - OPENCLAW_SSH_ENABLED=true - OPENCLAW_SSH_AUTHORIZED_KEYS=ssh-ed25519 AAAA... user@host ports: - "2222:22"
Multiple keys (via environment):
yamlenvironment: - OPENCLAW_SSH_ENABLED=true - | OPENCLAW_SSH_AUTHORIZED_KEYS= ssh-ed25519 AAAA... user1@host ssh-rsa AAAA... user2@host
Via mounted file:
yamlvolumes: - ./authorized_keys:/ssh/authorized_keys:ro
Via Docker secret:
yamlsecrets: - ssh_authorized_keys
Then connect: ssh -p 2222 node@<host>
bash# 1. Interactive setup docker compose run --rm openclaw openclaw onboard # 2. Set OPENCLAW_SKIP_ONBOARD=true in .env # 3. Start docker compose up -d
bash# *** (shows QR code) docker compose exec -it openclaw openclaw channels login --channel *** # *** docker compose exec openclaw openclaw channels add --channel *** --token <BOT_TOKEN> # *** docker compose exec openclaw openclaw channels add --channel *** --token <BOT_TOKEN> # Slack docker compose exec openclaw openclaw channels add --channel slack --bot-token <xoxb-...> --app-token <xapp-...>
bashdocker compose exec openclaw openclaw health docker compose exec openclaw openclaw channels list docker compose exec openclaw openclaw <command>
bashdocker compose pull docker compose up -d
Or rebuild from source:
bashdocker compose build --no-cache docker compose up -d
bashdocker 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:
bashsudo 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.





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务