适合用 Docker
你想要一个相对独立、随时能重建的运行环境,或者你是在服务器上跑,不想本地一堆安装到处散。
Install 导读
Docker 是可选的,只有当你想要隔离的网关环境或在无本地安装的主机上运行时才需要。最易踩的坑是内存不足:构建镜像至少需要 2 GB RAM,否则 pnpm install 会被 OOM 杀掉(退出码 137)。如果你只是本地快速开发,用普通安装流程更快。
先讲这一页到底在解决什么
Docker 是可选的,只有当你想要隔离的网关环境或在无本地安装的主机上运行时才需要。最易踩的坑是内存不足:构建镜像至少需要 2 GB RAM,否则 pnpm install 会被 OOM 杀掉(退出码 137)。如果你只是本地快速开发,用普通安装流程更快。
第一站
Docker 最容易让新手卡住的地方,不是命令难,而是根本没先想清楚自己为啥要用它。
你想要一个相对独立、随时能重建的运行环境,或者你是在服务器上跑,不想本地一堆安装到处散。
你只是自己电脑上开发,想要最快的改了就试,不想多一层容器折腾,那普通安装往往更轻快。
官方特别提醒:Agent 沙箱也会用 Docker,但这不等于你必须把整个 Gateway 都塞进 Docker 里。
Docker 是“装箱方案”,不是 OpenClaw 的入场门票。
第二站
整页最值得先看的命令其实只有一条。因为那条脚本会把很多零碎动作一次做完。
./scripts/docker/setup.sh像按下“帮我把大箱子搭起来”的总按钮。它会去建镜像、跑 onboarding、生成网关 token、再把容器启动起来。
因为你不用手动一步一步喊每个容器干活。官方已经把最容易漏掉的前置动作都串好了。
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest" 就像先告诉脚本:“别现场造箱子了,去仓库拿一个现成的大箱子回来。”
第一次跑 Docker 版 OpenClaw,最稳的做法不是自己拆步骤,而是先用 setup 脚本把整条流水线跑通。
第三站
脚本看起来短,但它背后做的事情不少。翻成人话,其实就三件。
它会问 provider 的 API key。这像在装机器之前,先把会用到的门卡收齐。
它会生成 gateway token 写进 .env。这就像顺手给控制台配了一把开门钥匙。
不是只把文件准备好,而是最后真把 Docker Compose 跑起来,让 OpenClaw 开始上班。
openclaw-cli 不是前期主角因为在容器刚要出生、还没真正起来之前,很多 onboarding 和初始配置要直接让 openclaw-gateway 自己干,不是让旁边的 CLI 小助手干。
第四站
容器起来以后,你接下来最常做的动作就是进控制台和加通道。
docker compose run --rm openclaw-cli dashboard --no-open像让容器里的小助手把控制台地址再念一遍给你听。它不会帮你自动开浏览器,但会把门牌号告诉你。
http://127.0.0.1:18789/这就是默认总控室门口。进去后把 token 贴进去,才算拿着门票进门。
docker compose run --rm openclaw-cli channels add --channel telegram --token \"...\"像让容器里的管理员去帮你登记一个新通道。你报出是哪扇门、它的钥匙是什么,它就把这扇门接进总控室。
docker compose run --rm openclaw-cli channels login像处理需要扫码登录的通道,比如 WhatsApp。不是所有通道都靠 token,有些真要你现场扫一下。
第五站
如果你不用 setup 脚本,官方也给了手动步骤。它的本质不是神秘,而是把脚本里的动作全摊开给你看。
docker build -t openclaw:local -f Dockerfile .像先在本地造一个专属于你的 OpenClaw 大箱子。
... dist/index.js onboard --mode local --no-install-daemon像在箱子还没正式开门前,先进去做第一次布置:铺床、摆桌子、放钥匙。
config set gateway.mode local / gateway.bind lan前者像告诉总控室“你现在是在本地模式工作”,后者像把门从“只给自己看”改成“主机能从外面敲到”。
docker compose up -d openclaw-gateway前面都准备好后,这一步才是真正把机器推上岗。
第六站
Docker 页里这部分很实用,因为容器世界里最怕“看起来像在跑,其实已经蔫了”。
curl -fsS http://127.0.0.1:18789/healthz像敲敲门问一句:“你人还在吗?”只看活没活。
curl -fsS http://127.0.0.1:18789/readyz像再问一句:“你不光醒着,是不是已经准备好开始接活了?”
docker compose exec openclaw-gateway node dist/index.js health --token \"$OPENCLAW_GATEWAY_TOKEN\"像拿着管理员门卡进去做一次更深的体检,不只是看它有没有呼吸,而是看里面状况怎么样。
Docker 自己也会定时去摸它的脉。如果一直不对劲,Docker 会把这个容器标成 unhealthy,等于贴了一张“这台机器不太对”的标签。
第七站
容器最容易骗到人的地方,是它看起来像一台完整机器,实际上很多地方都很会“失忆”。
/home/node/.openclaw这像 OpenClaw 的家。配置、token、认证资料、聊天状态,很多重要东西都住这里,所以官方把它挂到宿主机上,避免换箱子就失忆。
Node 运行时、系统包、你 bake 进去的外部工具,像焊死在箱子壁上的部件。要改这些,就得重建镜像。
media/、session 日志、cron 记录、滚动日志这些目录会慢慢堆东西。官方特地点它们,是怕你哪天发现磁盘被吃空了。
容器可以随时换,但家不能丢。
第八站
官方后面列了很多折叠块,看着多,其实都是几类常见事故。
如果构建时冒出 exit 137,多半不是你命令写错了,而是这台机器太瘦,装箱装到一半累趴了。
容器里默认是 uid 1000 的 node 用户在干活。如果宿主机目录不让它写,它就像搬家工人到了门口却没有钥匙。
如果 Control UI 说需要 pairing,官方给的命令其实就是去看设备等待区,再把那个浏览器设备批准掉。
Docker 版 OpenClaw 的主线很简单:决定要不要装箱,搭箱子,点亮控制台,把重要家当挂到箱子外面,出事就按“内存、权限、健康检查”这三条先查。