最近OpenClaw 用 Docker 重新部署了一遍。一开始只是想简单试试最新版镜像,顺便把控制台映射到本地浏览器访问,后来发现:
OpenClaw ,其实很适合用 Docker 部署
原因不只是“启动方便”,更关键的是:
数据隔离,不会影响宿主机(电脑)的文件
升级、重建、迁移都更方便 出问题时更容易定位,也更容易回退
今天分享的主题主要是如下2个部分:
为什么 OpenClaw 适合用 Docker 部署 如何从 DockerHub 拉镜像,把它完整跑通到浏览器可用
一、为什么我建议用 Docker 部署 OpenClaw?
很多人装一类 AI 网关或者本地代理工具,第一反应是直接在本机装依赖、跑命令、起服务。这样当然也能用,但当你真的开始长期折腾时,很快就会遇到几个经典问题:
数据安全问题,龙虾乱改你的电脑文件,甚至删除你的文件 配置改乱了,不知道哪里出错 升级之后行为变了,很难回退 想清理环境,结果系统里残留一堆文件 一个服务把本机端口、配置、缓存、日志搅成一团
而 Docker 恰好就可以避免这类问题。
二、如何快速部署?
总体实现就是下面这条链路:
Mac 浏览器 -> http://localhost:8888 -> Docker 端口映射 8888:18789 -> 容器内 OpenClaw 监听 18789 -> OpenClaw Control UI / Gateway1、第一步:从 DockerHub 拉取 OpenClaw 镜像
拉取镜像:


2、第二步:启动容器并映射端口
打开终端

启动命令如下:
docker run -d \ --name claw \ -p 8888:18789 \ dr34m/openclaw:latest \ openclaw gateway --allow-unconfigured解释一下这个启动命令
--name claw
启动一个名称为claw的容器
-p 8888:18789
表示:
Mac 本地 8888对应容器内 18789
这一步只是 Docker 层的映射成立,但不代表浏览器一定马上能打开。后面还有 OpenClaw 自己的监听地址问题要处理。
3、第三步:确认容器已经跑起来
先执行:
docker ps如果正常,你会看到:

这说明宿主机端口发布已经生效了。
你也可以测健康检查:
curl http://127.0.0.1:8888/healthz如果返回:
{"ok":true,"status":"live"}那说明已经通了。
但我这次实际部署时,前面并没有一次成功,而是遇到了一个很典型的问题:
Docker 映射对了 容器也在跑 但浏览器打不开
为什么容器在跑,浏览器却打不开?
这是 Docker 部署 OpenClaw 时最容易踩的坑之一。
问题的根本不在 Docker,而在于:
OpenClaw 自己到底监听在哪个地址上。
我查看日志后发现,最开始它监听的是:
ws://127.0.0.1:187894、修改 OpenClaw 监听地址
这一步需要改容器内的配置文件:

查看配置:

修改配置,大家可以参照我的配置去修改
{"messages": {"ackReactionScope": "group-mentions" },"plugins": {"entries": {"device-pair": {"config": {"publicUrl": "ws://localhost:8888" } } }},"agents": {"defaults": {"maxConcurrent": 4,"subagents": {"maxConcurrent": 8 },"compaction": {"mode": "safeguard" },"workspace": "/home/node/.openclaw/workspace","model": {"primary": "minimax/MiniMax-M2.7" },"models": {"minimax/MiniMax-M2.7": {} } } },"gateway": {"auth": {"mode": "token","token": "" },"mode": "local","port": 18789,"bind": "lan","tailscale": {"mode": "off","resetOnExit": false },"controlUi": {"allowInsecureAuth": true,"allowedOrigins": ["http://localhost:8888","http://127.0.0.1:8888" ] } },"meta": {"lastTouchedVersion": "2026.3.31","lastTouchedAt": "2026-04-01T14:05:06.103Z" },"session": {"dmScope": "per-channel-peer" },"tools": {"profile": "coding" }}主要改controlUi和gateway两个部分
bind: "lan"这个配置决定 OpenClaw 不只是监听容器内 127.0.0.1,而是监听对外可达地址,相当于:
0.0.0.0:18789这时候 Docker 转发进来的流量才能真正命中 OpenClaw。
mode: "local"这个是本地 / Docker 场景下推荐一起开的设置,可以避免后续控制台和连接目标理解错位。
5、重启容器并验证
改完配置后,在宿主机执行:
docker restart claw然后再看日志:
docker logs claw如果你看到:
[gateway] listening on ws://0.0.0.0:18789说明监听地址已经正确了。
然后再测:
curl http://127.0.0.1:8888/healthz如果返回 200,说明宿主机访问容器服务这一步打通了。
6、解决 pairing required
如果你继续往下走,很可能还会看到:
pairing required这一步其实是 安全授权流程,不算异常。
它的意思是:
浏览器页面已经连接到 Gateway 了,但当前浏览器设备还没有被这个 Gateway 批准。
查看待配对设备
openclaw devices list我已经配对过了,所以没有pendding状态的devices
批准设备
docker exec claw openclaw devices approve <REQUEST_ID> 再次确认
docker exec claw openclaw devices 配对完成即可通过宿主机的8888端口进入openclaw

总结:
如果你只是想快速体验 OpenClaw,或者很注重数据安全,从 DockerHub 拉镜像再跑起来,确实很方便,其他部署方式也有各自的优势,大家选择合适自己的部署方式就行
夜雨聆风