功能齐全且自动化的OpenClaw Docker镜像

快速入门

最小(docker run

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 \
  -v openclaw-data:/data \
  coollabsio/openclaw:latest
  • ANTHROPIC_API_KEY— 任何受支持的提供商密钥均可使用(OpenAI、Gemini 等)

  • AUTH_PASSWORD— 使用 HTTP 基本身份验证保护 Web UI(用户默认使用admin,可通过覆盖AUTH_USERNAME

  • OPENCLAW_GATEWAY_TOKEN— 内部 API 令牌;如果省略则自动生成,但为了获得稳定的 API 访问权限,请显式设置。

  • /data— 重启后仍能保留状态、配置和工作区

完整配置(docker-compose)

包括持久存储、浏览器边车(CDP + VNC)和 webhook 钩子。参见docker-compose.yml

docker compose up -d

开始之后:

  1. OpenClaw 用户界面— localhost:8080(登录名:您的AUTH_USERNAME/ AUTH_PASSWORD

  2. 浏览器桌面— localhost:8080/browser/(login: your AUTH_USERNAME/ browser PASSWORD) — 使用此方法登录需要身份验证的网站(OAuth、双因素身份验证、验证码)。Openclaw 通过 CDP 重用会话。

建筑学

┌─────────────────────────────────────────────┐
│  Docker container (coollabsio/openclaw)     │
│                                             │
│  Baked in: Linuxbrew, Go, uv, build-essential│
│  Persistent volume: /data                   │
│    ├── .openclaw/      (state & config)     │
│    └── workspace/      (user projects)      │
│                                             │
│  ┌──────────┐  :8080   ┌────────────────┐  │
│  │  nginx    │ ──────→  │  openclaw      │  │
│  │  (basic   │  proxy   │  gateway       │  │
│  │   auth)   │  :18789  │  :18789        │  │
│  └──────────┘          └────────────────┘  │
│                                             │
│  entrypoint.sh                              │
│    1. run custom init script (optional)     │
│    2. configure.js (env vars → json)        │
│    3. nginx (background)                    │
│    4. exec openclaw gateway                 │
└─────────────────────────────────────────────┘

双层 Docker 构建:

  1. 基础镜像Dockerfile.base)— 从源代码构建 openclaw。已标记coollabsio/openclaw-base:<version>

  2. 最终镜像Dockerfile)— 基于基础镜像,添加了nginx和env-to-config脚本。已标记coollabsio/openclaw:<version>

文件

.github/workflows/auto-update.yml   — cron every 6h, check openclaw releases, build+push
.github/workflows/build.yml         — CI on push/PR (build only, no push)
Dockerfile.base                     — multi-stage: build openclaw from source → slim runtime
Dockerfile                          — FROM base, add nginx + config scripts + entrypoint
scripts/configure.js                — reads env vars, writes/patches openclaw.json
scripts/entrypoint.sh               — container entrypoint: configure → nginx → gateway
scripts/smoke.js                    — smoke test (openclaw --version)
nginx/default.conf                  — reverse proxy :8080 → :18789, optional basic auth
.dockerignore                       — standard ignores
.env.example                        — env var reference

auto-update.yml 工作流程

Jobs:
1. check-release        — fetch latest openclaw/openclaw release, skip if image exists
2. build-base           — matrix amd64/arm64, build Dockerfile.base, push per-arch
3. merge-base-manifest  — merge into coollabsio/openclaw-base:<ver> + :latest
4. build-final          — matrix amd64/arm64, build Dockerfile, push per-arch
5. merge-final-manifest — merge into coollabsio/openclaw:<ver> + :latest

触发器:schedule: '0 */6 * * *'+ workflow_dispatch(版本、强制重建、跳过最新标签)。

需要密钥(仓库设置)

  • DOCKERHUB_USERNAME— Docker Hub 用户名

  • DOCKERHUB_TOKEN— Docker Hub 访问令牌

  • GITHUB_TOKEN— 由 GitHub Actions 自动提供

环境变量

人工智能提供商(至少需要一家)

多变的 描述
ANTHROPIC_API_KEY Anthropic API 密钥。用于配置 Claude 模型(Opus 4.5、Sonnet 4.5、Haiku 4.5)。如果存在,则设置为主要密钥。
OPENAI_API_KEY OpenAI API 密钥。用于配置 GPT 模型(5.2、5、4.5-预览版)。如果没有 Anthropic 密钥,则使用此主密钥。
OPENROUTER_API_KEY OpenRouter API 密钥。如果没有 Anthropologie/OpenAI 密钥,则使用主密钥。
GEMINI_API_KEY Google Gemini API 密钥。如果未设置其他提供商密钥,则为主要密钥。
XAI_API_KEY xAI API 密钥。用于配置 Grok 模型。
GROQ_API_KEY Groq API 密钥。用于在 Groq 硬件上配置 Llama 模型。
MISTRAL_API_KEY Mistral API 密钥。用于配置 Mistral Large 及其他型号。
CEREBRAS_API_KEY Cerebras API 密钥。用于在 Cerebras 硬件上配置 Llama 模型。
VENICE_API_KEY Venice AI API 密钥(兼容 OpenAI)。配置 Llama 3.3 70B。
MOONSHOT_API_KEY Moonshot API 密钥(兼容 OpenAI)。用于配置 Kimi K2.5。
KIMI_API_KEY Kimi Coding API密钥(兼容Anthropic)。用于配置K2P5。
MINIMAX_API_KEY MiniMax API 密钥(兼容 Anthropic)。用于配置 MiniMax M2.1。
ZAI_API_KEY ZAI API密钥。用于配置GLM模型。
AI_GATEWAY_API_KEY Vercel AI 网关 API 密钥。
OPENCODE_API_KEY OpenCode API 密钥。也接受为OPENCODE_ZEN_API_KEY.
SYNTHETIC_API_KEY 合成 API 密钥(与人类学兼容)。
COPILOT_GITHUB_TOKEN GitHub Copilot 令牌。通过 GitHub 配置 Claude 模型。
XIAOMI_API_KEY 小米 MiMo API 密钥(兼容 Anthropico)。配置 MiMo v2 闪存。

可以同时设置多个提供商。主要模型的优先级:Anthropic > OpenAI > OpenRouter > Gemini > OpenCode > GitHub Copilot > xAI > Groq > Mistral > Cerebras > Venice > Moonshot > Kimi > MiniMax > Synthetic > ZAI > AI Gateway > Xiaomi > Bedrock > Ollama。

openclaw.json如果删除了提供程序环境变量,则下次启动时会从该提供程序部分中清除该变量。

Deepgram(音频转录,可选)

多变的 描述
DEEPGRAM_API_KEY Deepgram API密钥。可通过Nova 3型号启用音频转录。

Amazon Bedrock(使用 AWS 凭证链)

多变的 默认 描述
AWS_ACCESS_KEY_ID AWS 访问密钥。两者AWS_ACCESS_KEY_ID都是AWS_SECRET_ACCESS_KEY必需的。
AWS_SECRET_ACCESS_KEY AWS 密钥。
AWS_REGION us-east-1 Bedrock 运行时端点的 AWS 区域。
AWS_SESSION_TOKEN 用于临时凭据的可选会话令牌。
BEDROCK_PROVIDER_FILTER ["anthropic"] 按提供商筛选基岩模型发现(JSON 数组或逗号分隔字符串)。

Ollama(本地模型,无需 API 密钥)

多变的 描述
OLLAMA_BASE_URL Ollama 服务器 URL(例如host.docker.internal:11434)。设置后启用 Ollama 提供程序。

模型选择

多变的 描述
OPENCLAW_PRIMARY_MODEL 覆盖自动选择的主模型。格式:(provider/model-id例如anthropic/claude-sonnet-4-5-20250929)。

HTTP 基本身份验证(推荐)

多变的 默认 描述
AUTH_PASSWORD (没有任何) 如果设置,nginx 将对除 hooks 路径(启用 hooks 时)之外的所有路由强制执行 HTTP 基本身份验证/healthz。如果未设置,则不进行身份验证——网关开放。
AUTH_USERNAME admin 用于基本身份验证的用户名。

网关

多变的 默认 描述
OPENCLAW_GATEWAY_TOKEN (自动生成) <STATE_DIR>/gateway.token用于网关认证的 Bearer 令牌。如果未设置,则自动生成并持久保存。
OPENCLAW_GATEWAY_PORT 18789 网关绑定的内部端口。
OPENCLAW_GATEWAY_BIND loopback 网关绑定模式。loopback= 仅限 127.0.0.1(nginx 代理 LAN 流量)。= lan0.0.0.0(直接访问,绕过 nginx 身份验证)。另见:tailnet,,autocustom
OPENCLAW_STATE_DIR /data/.openclaw 持久状态目录。在此处挂载卷。
OPENCLAW_WORKSPACE_DIR /data/workspace openclaw 项目的工作区目录。
OPENCLAW_CONFIG_PATH <STATE_DIR>/openclaw.json 覆盖配置文件路径。
OPENCLAW_CUSTOM_CONFIG /app/config/openclaw.json 用户提供的自定义 JSON 配置路径。环境变量覆盖其上。

钩子(webhook 自动化,可选)

多变的 默认 描述
HOOKS_ENABLED 设置为true启用 webhook hooks 端点。
HOOKS_TOKEN 用于钩子请求身份验证的共享密钥。启用钩子时,OpenClaw 需要此密钥。
HOOKS_PATH /hooks 钩子端点的路径前缀(/hooks/wake,,/hooks/agent等等)。

启用钩子并AUTH_PASSWORD进行相应设置后,钩子路径会自动绕过 HTTP 基本身份验证。Openclaw 会使用钩子令牌来验证请求。文档:docs.openclaw.ai/automation/webhook

浏览器工具(远程 CDP 边车,可选)

多变的 默认 描述
BROWSER_CDP_URL 指向浏览器边车的远程 CDP URL(例如browser:9222)。激活浏览器工具需要此 URL。
BROWSER_EVALUATE_ENABLED false 允许通过浏览器操作在页面上下文中执行 JavaScript 代码。
BROWSER_SNAPSHOT_MODE 默认快照模式(例如efficient)。
BROWSER_REMOTE_TIMEOUT_MS 1500 远程 CDP 连接的 HTTP 超时时间(毫秒)。
BROWSER_REMOTE_HANDSHAKE_TIMEOUT_MS 3000 远程 CDP 的 WebSocket 握手超时时间(毫秒)。
BROWSER_DEFAULT_PROFILE 覆盖默认浏览器配置文件名称。

需要一个通过 Docker 网络连接的独立浏览器容器。推荐配置:(kasmweb/chrome通过 noVNC 启用完整版 Chrome 桌面:6901,并启用 CDP :9222)。文档:docs.openclaw.ai/tools/browser

浏览器登录(VNC sidecar)

对于需要身份验证的网站,请使用此功能kasmweb/chrome以便您可以通过基于 Web 的桌面手动登录。Openclaw 会通过 CDP 重用已验证的会话。

  1. 打开https://<host>:6901——通过 noVNC 实现完整的 Chrome 桌面

  2. 导航至目标网站,手动登录(处理验证码、双因素身份验证、OAuth)

  3. 会话在挂载的卷中会在重启后保留。

  4. 设置BROWSER_CDP_URL=http://browser:9222— openclaw 通过 CDP 连接

在边车容器的配置文件目录下挂载一个持久卷,/home/kasm-user以便 cookie 和会话在容器重启后仍然有效。边车容器可能需要CHROME_ARGS=--remote-debugging-port=9222 --remote-debugging-address=0.0.0.0暴露 CDP。文档:docs.openclaw.ai/tools/browser-login

通道(可选)

多变的 默认 描述
TELEGRAM_BOT_TOKEN 来自 BotFather 的 Telegram 机器人令牌。
TELEGRAM_DM_POLICY pairing DM访问策略:pairing,,,或allowlistopendisabled
TELEGRAM_ALLOW_FROM 以逗号分隔的用户 ID/用户名允许列表。当需要时dmPolicy=allowlistdmPolicy=open使用*)。
TELEGRAM_GROUP_POLICY allowlist 组访问策略:open,,allowlistdisabled
TELEGRAM_GROUP_ALLOW_FROM 以逗号分隔的群组发件人允许列表(用户 ID/用户名)。
TELEGRAM_REPLY_TO_MODE first 回复主题:off,,firstall
TELEGRAM_CHUNK_MODE length 出站拆分模式:lengthnewline(段落边界)。
TELEGRAM_TEXT_CHUNK_LIMIT 4000 出站文本块大小(字符)。
TELEGRAM_STREAM_MODE partial 草稿流:off,,partialblock
TELEGRAM_LINK_PREVIEW true 切换外发邮件的链接预览。
TELEGRAM_MEDIA_MAX_MB 5 入站/出站媒体流量上限(MB)。
TELEGRAM_REACTION_NOTIFICATIONS own 哪些反应会触发事件:off,,ownall
TELEGRAM_REACTION_LEVEL minimal 代理反应能力:off,,,或。ackminimalextensive
TELEGRAM_INLINE_BUTTONS allowlist 内联按钮功能:off,,,,或。dmgroupallallowlist
TELEGRAM_ACTIONS_REACTIONS true Gate Telegram 工具反应。
TELEGRAM_ACTIONS_STICKER false Gate Telegram贴纸发送/搜索操作。
TELEGRAM_PROXY Bot API 调用的代理 URL(SOCKS/HTTP)。
TELEGRAM_WEBHOOK_URL 启用带有公共端点 URL 的 webhook 模式。
TELEGRAM_WEBHOOK_SECRET Webook 密钥(可选)。
TELEGRAM_WEBHOOK_PATH /telegram-webhook 本地 webhook 路径,用于接收更新。
TELEGRAM_MESSAGE_PREFIX 添加到入站消息前的前缀。
DISCORD_BOT_TOKEN Discord 机器人令牌。在 Discord 开发者门户中启用消息内容意图。
DISCORD_DM_POLICY pairing DM访问策略:pairing,,,或allowlistopendisabled
DISCORD_DM_ALLOW_FROM 以逗号分隔的私信用户 ID/名称。
DISCORD_GROUP_POLICY allowlist 公会访问政策:open,,allowlistdisabled
DISCORD_REPLY_TO_MODE off 回复主题:off,,firstall
DISCORD_CHUNK_MODE length 出站拆分模式:lengthnewline
DISCORD_TEXT_CHUNK_LIMIT 2000 出站文本块大小(字符)。
DISCORD_MAX_LINES_PER_MESSAGE 17 每条消息的软线路限制。
DISCORD_MEDIA_MAX_MB 8 入站媒体流量上限(MB)。
DISCORD_HISTORY_LIMIT 20 以下是公会最近的消息,供您参考。
DISCORD_DM_HISTORY_LIMIT 每个用户的私信历史记录数量有限制。
DISCORD_REACTION_NOTIFICATIONS own 哪些反应会触发事件:off,,,或。ownallallowlist
DISCORD_ALLOW_BOTS false 处理来自其他机器人的消息。
DISCORD_MESSAGE_PREFIX 添加到入站消息前的前缀。
DISCORD_ACTIONS_REACTIONS true 门反应动作。
DISCORD_ACTIONS_STICKERS true 寄送门贴纸。
DISCORD_ACTIONS_EMOJI_UPLOADS true 上传大门表情符号。
DISCORD_ACTIONS_STICKER_UPLOADS true 上传登机口贴纸。
DISCORD_ACTIONS_POLLS true 创建投票站。
DISCORD_ACTIONS_PERMISSIONS true 网关通道权限编辑。
DISCORD_ACTIONS_MESSAGES true 门禁消息读取/发送/编辑/删除。
DISCORD_ACTIONS_THREADS true 门线程操作。
DISCORD_ACTIONS_PINS true 门引脚/引脚断开操作。
DISCORD_ACTIONS_SEARCH true 网关消息搜索。
DISCORD_ACTIONS_MEMBER_INFO true 门卫成员查询。
DISCORD_ACTIONS_ROLE_INFO true 登机口角色列表。
DISCORD_ACTIONS_CHANNEL_INFO true 门通道信息。
DISCORD_ACTIONS_CHANNELS true 门通道管理。
DISCORD_ACTIONS_VOICE_STATUS true 门语音状态。
DISCORD_ACTIONS_EVENTS true 门禁活动管理。
DISCORD_ACTIONS_ROLES false 门禁角色添加/移除。
DISCORD_ACTIONS_MODERATION false 门禁超时/踢出/封禁。
SLACK_BOT_TOKEN Slack 机器人令牌(xoxb-...)。Slack 需要机器人令牌和应用程序令牌。
SLACK_APP_TOKEN Slack 应用令牌(xapp-...)。
SLACK_USER_TOKEN Slack 用户令牌(xoxp-...)。可选,用于用户级 API 调用。
SLACK_SIGNING_SECRET 用于HTTP模式验证的签名密钥。
SLACK_MODE socket 连接模式:sockethttp
SLACK_WEBHOOK_PATH /slack/events HTTP 模式下的 Webhook 路径。
SLACK_DM_POLICY pairing DM 访问策略:pairingopen
SLACK_DM_ALLOW_FROM 以逗号分隔的私信允许列表中的用户 ID/句柄。
SLACK_GROUP_POLICY open 通道访问策略:open,,allowlistdisabled
SLACK_REPLY_TO_MODE off 回复主题:off,,firstall
SLACK_REACTION_NOTIFICATIONS own 哪些反应会触发事件:off,,ownall
SLACK_CHUNK_MODE newline 出站拆分模式。
SLACK_TEXT_CHUNK_LIMIT 4000 出站文本块大小(字符)。
SLACK_MEDIA_MAX_MB 20 入站媒体流量上限(MB)。
SLACK_HISTORY_LIMIT 50 近期频道消息,供参考。
SLACK_ALLOW_BOTS false 处理来自其他机器人的消息。
SLACK_MESSAGE_PREFIX 添加到入站消息前的前缀。
SLACK_ACTIONS_REACTIONS true 门反应动作。
SLACK_ACTIONS_MESSAGES true 门禁消息读取/发送/编辑/删除。
SLACK_ACTIONS_PINS true 门引脚/引脚断开操作。
SLACK_ACTIONS_MEMBER_INFO true 门卫成员查询。
SLACK_ACTIONS_EMOJI_LIST true 检索大门表情符号列表。
WHATSAPP_ENABLED 启用此选项true可开启 WhatsApp 频道。运行时使用二维码/配对码进行身份验证。
WHATSAPP_DM_POLICY pairing DM访问策略:pairing,,,或allowlistopendisabled
WHATSAPP_ALLOW_FROM DM 允许列表中的逗号分隔的 E.164 电话号码。
WHATSAPP_SELF_CHAT_MODE false 使用您的个人 WhatsApp 号码运行时启用此功能。
WHATSAPP_GROUP_POLICY allowlist 组访问策略:open,,disabledallowlist
WHATSAPP_GROUP_ALLOW_FROM 以逗号分隔的 E.164 电话号码,用于群组发件人允许列表。
WHATSAPP_MEDIA_MAX_MB 50 入站媒体存储上限(MB)。
WHATSAPP_HISTORY_LIMIT 50 插入最近未处理的消息以提供群组上下文。
WHATSAPP_DM_HISTORY_LIMIT DM历史记录限制以用户回合数为单位。
WHATSAPP_SEND_READ_RECEIPTS true 收到邮件后发送已读回执(蓝色勾号)。
WHATSAPP_ACK_REACTION_EMOJI 消息接收时发送表情符号(例如👀)。省略此操作将禁用此功能。
WHATSAPP_ACK_REACTION_DIRECT true 在私信聊天中发送确认回复。
WHATSAPP_ACK_REACTION_GROUP mentions 群体反应行为:always,,mentionsnever
WHATSAPP_MESSAGE_PREFIX 入站消息前缀。
WHATSAPP_ACTIONS_REACTIONS true 启用 WhatsApp 表情工具。

如果移除某个频道的环境变量,则下次启动时该频道的配置将被清除。WhatsApp 环境变量会完全覆盖任何现有的 WhatsApp 配置(不会与自定义 JSON 合并)。

提供程序覆盖(可选)

多变的 描述
AI_GATEWAY_BASE_URL AI网关(例如Cloudflare AI网关)的自定义基本URL。根据URL后缀应用于匹配的提供商。
ANTHROPIC_BASE_URL 具体来说,覆盖 Anthropic API 的基本 URL。
MOONSHOT_BASE_URL 覆盖 Moonshot API 基本 URL。默认值:api.moonshot.ai/v1。
KIMI_BASE_URL 覆盖 Kimi Coding API 基本 URL。默认值:api.moonshot.ai/anthropic。

额外系统软件包(可选)

多变的 描述
OPENCLAW_DOCKER_APT_PACKAGES 以空格分隔的 apt 软件包列表,用于在容器启动时安装(例如ffmpeg build-essential)。软件包会在 OpenClaw 启动前安装,并​​在每次容器重启时重新安装。

Linuxbrew(已集成到镜像中)

基础镜像已内置常用技能依赖关系:

  • **Linuxbrew——**开箱即用/home/linuxbrew/.linuxbrew但需要brew改进的技能

  • Go——/usr/local/go用于 Go 语言相关的技能和工具

  • uv — 适用于 Python 技能的快速 Python 包管理器

  • build-essentialgitcurl — 常见的构建依赖项

注意:运行时安装的软件包(例如通过 `apt install` brew install)是容器文件系统的一部分,不会容器重建后保留。要永久添加软件包,请自定义 `apt install`Dockerfile.base或使用OPENCLAW_DOCKER_APT_PACKAGESapt-available 提供的等效软件包。

自定义初始化脚本(可选)

多变的 默认 描述
OPENCLAW_DOCKER_INIT_SCRIPT (没有任何) 每次容器启动时,在 OpenClaw 启动之前运行的脚本。必须是可执行且幂等的。

港口

多变的 默认 描述
PORT 8080 nginx 监听的外部端口。

Coolify特有(由Coolify自动设置)

多变的 描述
COOLIFY_FQDN 由 Coolify 分配的公共 FQDN。
COOLIFY_URL Coolify 控制面板网址。
COOLIFY_BRANCH Git分支已部署。

自定义 JSON 配置(Docker 挂载)

对于过于复杂的设置(例如channels.*.groups,代理默认值、插件配置),无法使用扁平化的环境变量,请将自定义 JSON 文件挂载到容器中:

docker run -v ./my-openclaw.json:/app/config/openclaw.json ...

OPENCLAW_CUSTOM_CONFIG如有需要,可使用环境变量覆盖挂载路径。

三层合并顺序(configure.js):

  1. 自定义 JSON(/app/config/openclaw.json)— 基础层

  2. 持久化状态(<STATE_DIR>/openclaw.json)— 保留先前运行的运行时更改

  3. 环境变量——始终优先应用。

数组会被替换,而不是连接。提供商 API 密钥始终从环境变量中读取,绝不会从 JSON 中读取。

注意: WhatsApp 是一个特例——当使用 WhatsApp 时WHATSAPP_ENABLED=true,环境变量会完全覆盖 WhatsApp 配置块(自定义的 JSON WhatsApp 键将被丢弃)。对于所有其他渠道,自定义的 JSON 键将被保留,环境变量会叠加在其上。

笔记

  • Openclaw 使用 CalVer v2026.1.29(大致每日发布版本)。通过 GitHub Releases API 检测到。

  • 使用原生ubuntu-24.04-arm运行器进行 arm64 构建(与 coollabsio/pocketbase 模式相同)。

  • 配置由环境驱动:设置环境变量 → 重启容器 → 配置自动更新。

docker-compose一键起太方便了

镜像有点大,能不能出个精简版

自动化构建脚本写得很规范,补了一课

ARM架构能跑吗?我在树莓派上试

@trblx ARM架构支持 树莓派4B 4GB能跑 但性能很弱 简单对话可以 复杂任务直接超时 建议至少8GB内存的ARM设备

@glych 镜像大是因为包含了完整的运行时环境 精简版可以用multi-stage build做 只保留运行时依赖 不含编译工具链 能砍掉一半体积

@pryzm 自动化构建脚本规范这点我深有体会 Dockerfile里每层都有注释 环境变量用ARG声明有默认值 这种工程化水平值得学习

Docker镜像功能齐全