乐于分享
好东西不私藏

OpenClaw其实很适合用 Docker部署(附完整教程)

OpenClaw其实很适合用 Docker部署(附完整教程)

最近OpenClaw 用 Docker 重新部署了一遍。一开始只是想简单试试最新版镜像,顺便把控制台映射到本地浏览器访问,后来发现:

OpenClaw ,其实很适合用 Docker 部署

原因不只是“启动方便”,更关键的是:

  • 数据隔离,不会影响宿主机(电脑)的文件
  • 升级、重建、迁移都更方便
  • 出问题时更容易定位,也更容易回退

今天分享的主题主要是如下2个部分:

  1. 为什么 OpenClaw 适合用 Docker 部署
  2. 如何从 DockerHub 拉镜像,把它完整跑通到浏览器可用

一、为什么我建议用 Docker 部署 OpenClaw?

很多人装一类 AI 网关或者本地代理工具,第一反应是直接在本机装依赖、跑命令、起服务。这样当然也能用,但当你真的开始长期折腾时,很快就会遇到几个经典问题:

  • 数据安全问题,龙虾乱改你的电脑文件,甚至删除你的文件
  • 配置改乱了,不知道哪里出错
  • 升级之后行为变了,很难回退
  • 想清理环境,结果系统里残留一堆文件
  • 一个服务把本机端口、配置、缓存、日志搅成一团

而 Docker 恰好就可以避免这类问题。


二、如何快速部署?

总体实现就是下面这条链路:

Mac 浏览器  -> http://localhost:8888  -> Docker 端口映射 8888:18789  -> 容器内 OpenClaw 监听 18789  -> OpenClaw Control UI / Gateway

1、第一步:从 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:18789

4、修改 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 拉镜像再跑起来,确实很方便,其他部署方式也有各自的优势,大家选择合适自己的部署方式就行

ps:评论区随机选取5位幸运朋友送500w的minimax token,欢迎大家留言探讨