原本我以为:
"Docker 跑个 OpenClaw,不就是拉镜像 → 启动 → 完事?"
结果现实告诉我:
年轻人,别太自信。
这篇文章完整复盘:
- 为什么要用 Linux 服务器 + Docker
- 实际部署怎么做
- 我踩过哪些坑
- 最终如何优雅收场
🚀 为什么要在 Linux 服务器上用 Docker 部署 OpenClaw?
核心优势:稳定、隔离、可迁移。
1️⃣ 稳定
Linux 服务器适合长期运行:
- 不怕关机
- 不怕睡眠
- 24×7 在线
如果你想让 OpenClaw 成为真正在线助手,服务器是标配。
2️⃣ Docker 带来的优势
✅ 环境隔离
- 不污染宿主机环境
- 不和其他 Node 项目冲突
- 不受系统 Node 版本影响
✅ 可复制性
测试环境、生产环境可一键复制:
docker compose up -d
✅ 快速回滚
删容器 → 重建 → 恢复 volume。
🛠 实际部署步骤
准备服务器
推荐:
- Ubuntu 22.04
- 2核4G 起步
- docker与docker-compose的环境
下载源码
git clone https://gh-proxy.com/https://github.com/openclaw/openclaw.git
修改Dockerfile
由于在安装的过程中需要访问github,你懂的,那是相当的慢。所以需要修改修改Dockerfile文件
RUN curl -fsSL https://bun.sh/install | bash 改成:
RUN apt-get update && apt-get install -y unzip curl
RUN curl -L https://gh-proxy.com/https://github.com/oven-sh/bun/releases/latest/download/bun-linux-x64.zip -o bun.zip \
&& unzip bun.zip \
&& mv bun-linux-x64/bun /usr/local/bin/bun \
&& chmod +x /usr/local/bin/bun \
&& rm -rf bun.zip bun-linux-x64
权限设置
容器中使用的node账户,默认是放在/root/.openclaw/目录下,没有node的访问权限,所以安装会报错,错误如下:
◇ Select channel (QuickStart)
│ Skip for now
Error: EACCES: permission denied, open '/home/node/.openclaw/openclaw.json.7.82108e98-b043-4034-9e3b-e3d283ecf73d.tmp'
这边把配置文件与工作空间文件放到下载的openclaw目录下
mkdir -p ./data/config
mkdir -p ./data/workspace
#授权
chown -R 1000:1000 ./data
#注意查看config与workspace里面的文件是否都有授权,没有的话,继续授权,如:
[root@localhost config]# chown -R 1000:1000 ./data/config/identity/
[root@localhost config]# chown -R 1000:1000 ./data/config/workspace/
安装
#注意运行时需要设置换个环境
export OPENCLAW_CONFIG_DIR=./data/config
export OPENCLAW_WORKSPACE_DIR=./data/workspace
./docker-setup.sh
配置
安装过程的选择,通过上下左右键来选择,输入回车键来确定选择。
Yes->QuickStart->Skip for now->All providers->Enter model manually->直接回车键->Skip for now->hooks,此处可以多选,全选,上下左右键来选择,按space来厕,然后输入回车键来确定选择
访问
你以为到这边就能正常访问了,NONONO!
由于openclaw对安全问题处理比较严格,不允许非本地电脑访问,需要修改相关的配置
编辑你挂载的配置文件:
./data/config/openclaw.json
加入:
{
"gateway": {
"controlUi": {
"allowedOrigins": [
"http://你的服务器IP:18789",
"http://localhost:18789"
]
}
}
}
查看容器的信息,出现下面即是正常运行:
端口转发
虽然能正常范文,还是出现异常,不能正常使用
control ui requires device identity (use HTTPS or localhost secure context)
我们通过端口转发,把本地的端口绑定到服务器的端口,实际是使用本地来访问openclaw,具体命令如下:
#powershell
ssh -L 18789:localhost:18789 user@服务器IP
如果出现unauthorized: gateway token missing (open the dashboard URL and paste the token in Control UI settings)
那是token不一致问题,在输入安装的时候会生成一个token,在配置文件中也会有一个token,要让这两个保持一致
看配置docker-compose的配置信息
docker compose config
其中OPENCLAW_GATEWAY_TOKEN即是token信息,查看./data/config/openclaw.json文件的token
可以修改./data/config/openclaw.json为docker-compose中的token信息,然后重启docker即可。
你以为到这边就能正常使用了,NONONO!
认证设备
openclaw还需要认证访问服务的设备才能正常使用。
登录容器后执行:
#登录容器
docker exec -it openclaw-openclaw-gateway-1 /bin/bash
# 列出待处理的请求
node dist/index.js devices list
# 按请求 ID 批准
node dist/index.js devices approve <requestId>
到这边终于能正常访问了
💥 踩坑实录
🧨 坑一:CLI 执行不了
错误使用:
openclaw devices list
正确方式:
docker compose exec openclaw node dist/index.js devices list
🔒 坑二:权限问题(EACCES)
报错:
EACCES: permission denied
/home/node/.openclaw/identity/device.json
解决:
chown -R 1000:1000 ./data
核心认知:Docker volume 权限 ≠ 容器权限。
🔐 坑三:Gateway Token Mismatch
报错:
unauthorized: gateway token mismatch
原因:
volume 中残留旧配置(openclaw.json)。
彻底解决:
rm -rf ./data/*
docker compose down
docker compose up -d
🌐 坑四:非 Loopback 安全限制
- 非 127.0.0.1
- 没 HTTPS
- 未设置 allowedOrigins
都会被拒绝访问。
OpenClaw 默认安全级别较高。
🧠 最重要的认知升级
容器是无状态的,但 volume 是有记忆的。
排错优先顺序:
- 看 volume
- 看 openclaw.json
- 再看 docker-compose
🎯 推荐生产架构
用户 → SSH/Nginx → OpenClaw Gateway → 模型 API
建议:
- 不公网暴露 Gateway
- 正确设置 volume 权限
- 使用 HTTPS
🏁 总结
部署 OpenClaw 本身不难。
难的是:
- 理解 Docker 权限
- 理解 volume 持久化
- 理解 Gateway 安全机制
一旦跑通,非常稳定且可扩展。
如果你正在被 token 或权限问题折磨,先检查 volume,再重启。
很多问题都会消失。