本系列第九篇:从环境到生产——用 Docker 给“龙虾”一个安全的“集装箱”,实现隔离、便携、永不掉线
欢迎回到 OpenClaw 系列教程。在之前的文章中,我们从理论认知一路走到本地安装,再到云端部署。但无论是本地直接安装还是云服务器部署,都有一个无法回避的问题:AI 拥有系统级执行权限——它能读写文件、运行命令、控制浏览器。如果 Agent 出现幻觉或被恶意诱导,后果可能是灾难性的。
这正是 Docker 部署的价值所在。
Docker 将 OpenClaw 及其所有依赖打包成一个独立的容器,与宿主机系统环境完全隔离。此外,容器化还带来了环境一致性、跨平台兼容、一键升级、快速回滚等一系列生产级特性。本文将系统讲解 OpenClaw 的 Docker 部署方案,覆盖从一键脚本到手工配置的全路径,并重点解析安全沙箱、数据持久化和国内网络优化等核心问题。
一、为什么选择 Docker 部署?
1.1 安全隔离:最根本的理由
这是 Docker 部署区别于其他方式的最核心价值。2026 年初,OpenClaw 的普及引发了安全领域的广泛讨论。安全研究人员已经指出:凭证泄露、权限提升和供应链漏洞是真实存在的威胁。
Docker 容器为 OpenClaw 提供了多层隔离屏障。在 macOS 和 Windows 上,Docker Desktop 通过 LinuxKit 虚拟机在宿主机和容器之间提供了一层隔离,容器本身还运行在受限的命名空间中。即使容器被攻破,攻击者的影响范围也被严格限制在容器内部,无法触及宿主机上的其他数据和应用。
1.2 环境一致性:“本地能跑,云端崩”的终结者
Docker 将 OpenClaw 及其所有运行依赖(Python 3.9、Node.js 22、各类依赖库等)打包成一个完整的镜像。无论在 Windows、macOS 还是 Linux 上运行,行为都是一致的。这彻底告别了“环境不一致导致部署失败”的困扰。
1.3 运维便捷:升级、回滚一条命令
容器化后,更新 OpenClaw 只需拉取新镜像并重启容器,回滚只需切换到旧镜像版本。配合 restart: always 或 unless-stopped 策略,容器异常退出后自动恢复,实现真正的 7×24 小时在线。
1.4 官方安全建议的核心要求
2026 年 3 月,多家机构发布安全通知,明确指出部署 OpenClaw 时必须采用 Docker 沙箱、虚拟机等隔离技术。Docker 部署不再是“可选项”,而是安全运行 AI Agent 的基本门槛。
二、环境准备
2.1 前置条件
验证命令:
bash
docker --versiondocker compose version
Docker Compose 必须使用新版插件形式(docker compose),而非旧版的独立二进制 docker-compose。
内存特别提醒:在构建镜像时,
pnpm install阶段需要较多内存。官方文档明确指出,1 GB 内存的主机可能因 OOM 被系统 kill(exit 137)。个人测试至少 2GB,生产环境建议 4GB+。
2.2 Docker 安装快速参考
Linux(Ubuntu/Debian) :
bash
curl -fsSL https://get.docker.com | sudo shsudo usermod -aG docker {OPENCLAW_GATEWAY_TOKEN}read_only: truetmpfs:- /tmpcap_drop:- ALLcap_add:- NET_BIND_SERVICE
安全加固说明:
只读文件系统:
read_only: true防止容器运行时写入文件系统丢弃所有能力:
cap_drop: ALL移除所有 Linux Capabilities,最小化攻击面仅添加必需能力:
cap_add: NET_BIND_SERVICE仅允许绑定网络端口临时文件用 tmpfs:
tmpfs: /tmp临时文件放在内存中,容器重启即失Token 从环境变量读取:避免 Token 硬编码在配置文件中
4.3 沙箱模式配置(高风险操作隔离)
如果希望 OpenClaw 能够执行系统命令但需要进一步隔离,可以启用 Docker 沙箱模式。需要挂载 Docker Socket:
yaml
services:openclaw:image: ghcr.io/openclaw/openclaw:latest# ... 其他配置volumes:- /var/run/docker.sock:/var/run/docker.sock:ro # 启用沙箱模式
挂载 Docker Socket 后,OpenClaw 可以启动独立的沙箱容器来执行高危操作,实现执行层与宿主机之间的二次隔离。
⚠️ 沙箱安全警告:2026 年 2 月披露的 CVE-2026-27002 漏洞显示,配置注入问题可能导致危险的 Docker 选项(如 bind mounts、host networking)被应用,引发容器逃逸或宿主机数据访问。OpenClaw 现已增加运行时防护和配置校验,但启用沙箱模式前请务必更新到最新版本。
4.4 环境变量配置
创建 .env 文件:
bash
OPENCLAW_GATEWAY_TOKEN=your-secure-token-here支持的常用环境变量(以 fourplayers/openclaw 社区镜像为例):
OPENCLAW_GATEWAY_TOKEN | ||
OPENCLAW_GATEWAY_HOST | localhost | |
OPENCLAW_GATEWAY_PORT | 18789 | |
OPENCLAW_TLS_ENABLED | false | |
ANTHROPIC_API_KEY | ||
OPENAI_API_KEY | ||
GEMINI_API_KEY | ||
OPENCLAW_AUTO_UPDATE | false | |
OPENCLAW_UPDATE_CHANNEL | stable |
4.5 启动与验证
bash
# 启动服务docker compose up -d# 查看状态docker compose ps# 查看日志docker compose logs -f openclaw# 健康检查curl http://127.0.0.1:18789/healthz
五、首次启动与 Onboarding
5.1 在容器内执行配置向导
无论采用哪种部署方式,首次启动后都需要在容器内完成 Onboarding:
bash
# 进入容器docker compose exec openclaw-gateway bash# 执行配置向导openclaw onboard
交互式向导会引导完成:
安全确认:了解 AI Agent 安全最佳实践
模型配置:选择模型供应商并输入 API Key
渠道配置:选择接入的通讯平台(Slack、Discord、Telegram、WhatsApp 等)
渠道允许列表:配置哪些渠道或用户可以访问 Bot
技能设置:启用联网搜索、图像生成等可选能力
配置完成后,Gateway 会自动重启。如果向导过程中中断(重启是正常现象),重新进入容器再次执行 openclaw onboard 即可,已有配置会复用。
5.2 手工配置模式(跳过向导)
如果不想使用交互式向导,也可以手工执行每个配置步骤:
bash
# 构建镜像docker build -t openclaw:local -f Dockerfile .# 运行 Onboard(不安装守护进程)docker compose run --rm --no-deps --entrypoint node openclaw-gateway \dist/index.js onboard --mode local --no-install-daemon# 设置网关模式docker compose run --rm --no-deps --entrypoint node openclaw-gateway \dist/index.js config set gateway.mode local# 设置绑定模式(允许局域网访问)docker compose run --rm --no-deps --entrypoint node openclaw-gateway \dist/index.js config set gateway.bind lan# 配置允许的访问来源(如果需要从外部访问)docker compose run --rm --no-deps --entrypoint node openclaw-gateway \dist/index.js config set gateway.controlUi.allowedOrigins \'["http://localhost:18789","http://127.0.0.1:18789"]' --strict-json
5.3 关于 Bind Mode 的重要说明
OpenClaw 2026.3.13 版本对配置系统进行了重大升级,引入了新的 Bind Mode 机制,不再支持直接使用 IP 地址(如 0.0.0.0)进行绑定配置。推荐使用 lan 模式以支持局域网访问。
六、数据持久化与备份
6.1 持久化目录说明
OpenClaw 将配置和状态存储在容器内 /home/node/.openclaw 目录下。这个目录必须挂载为 Volume,否则容器重建后所有配置都会丢失。
text
./data/ # 挂载点:/home/node/.openclaw├── openclaw.json # 主配置文件(网关设置、API Keys、TLS 配置)├── openclaw.db # SQLite 数据库(会话、记忆、向量存储)├── memory/ # 短期记忆日志├── sessions/ # 会话存档└── skills/ # 安装的社区技能
./workspace 目录用于存放项目工作文件,可根据需要挂载。
6.2 备份策略
方法一:备份 Volume 目录
bash
# 停止容器docker compose down# 打包数据目录tar -czf openclaw-backup-(pwd):/backup alpine \tar czf /backup/openclaw-data-backup.tar.gz -C /source .
生产环境建议配置自动化定时备份,同时备份配置、技能和 Docker Volume。
6.3 迁移到新服务器
bash
# 在源服务器上tar -czf openclaw-full-backup.tar.gz ./data ./workspace .env# 在新服务器上解压并启动tar -xzf openclaw-full-backup.tar.gzdocker compose up -d
七、日志管理与监控
7.1 查看实时日志
bash
# 持续输出日志docker compose logs -f openclaw-gateway# 查看最近 100 行docker compose logs --tail 100 openclaw-gateway
7.2 健康检查
OpenClaw 内置了健康检查端点:
bash
curl http://127.0.0.1:18789/healthz返回 OK 表示服务正常运行。可以配合监控系统(如 Prometheus)定期探测。
7.3 日志轮转配置
为防止日志文件无限增长,在 Docker Compose 中配置日志限制:
yaml
services:openclaw-gateway:logging:driver: "json-file"options:max-size: "10m"max-file: "3"
7.4 OpenClaw Doctor 诊断工具
在容器内运行诊断:
bash
docker compose exec openclaw-gateway openclaw doctor八、更新与维护
8.1 更新容器版本
bash
# 拉取最新镜像docker compose pull# 重新创建容器docker compose up -d# 清理旧镜像docker image prune -f
8.2 回滚到指定版本
bash
# 修改 .env 中的版本标签OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw:2026.3.31# 重启服务docker compose up -d
九、安全最佳实践清单
以下安全实践对于生产环境部署至关重要:
"127.0.0.1:18789:18789" 限制本机访问 | ||
read_only: true | ||
cap_drop: ALLcap_add: NET_BIND_SERVICE | ||
🔴 必须:安全运行的最低门槛;🟡 强烈建议:生产环境推荐配置;🟢 建议:提升可维护性的优化项
十、常见问题与解决方案
Q1:构建时内存不足(exit code 137)
现象:docker compose up 过程中进程被 kill,退出码 137。
原因:内存不足导致 OOM Killer 终止进程。pnpm install 在 1GB 内存主机上可能被 kill。
解决方案:
升级服务器配置(推荐 4GB+)
使用预构建镜像替代本地构建:
export OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw:latest
Q2:外部无法访问 Web UI
现象:浏览器访问 http://<服务器IP>:18789 无响应。
原因:可能涉及多个层面——端口仅绑定到 127.0.0.1、防火墙未放行、Bind Mode 配置问题。
解决方案:
检查 Docker 端口映射:
bash
docker compose port openclaw-gateway 18789输出应为
0.0.0.0:18789(允许外部)或127.0.0.1:18789(仅本机)。检查服务器防火墙(以 Ubuntu UFW 为例):
bash
sudo ufw allow 18789/tcp如果使用云服务器,检查安全组/防火墙规则是否放行了 18789 端口。
配置 Bind Mode(参见 5.3 节)。
Q3:non-loopback Control UI requires allowedOrigins 错误
现象:Gateway 启动失败,日志提示需要配置 allowedOrigins。
原因:OpenClaw 2026.2.25 版本后加强了安全策略,要求显式配置允许的访问来源。
解决方案:在容器的 openclaw.json 中添加:
json
{"gateway": {"controlUi": {"allowedOrigins": ["http://127.0.0.1:18789","http://localhost:18789"]}}}
配置后重启容器:
bash
docker compose down && docker compose up -dQ4:国内 Docker Hub 镜像拉取超时
现象:docker pull 命令超时或速度极慢。
解决方案:
配置国内镜像源(见 2.3 节)
使用阿里云容器镜像服务拉取:
bash
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/openclaw:latestdocker tag registry.cn-hangzhou.aliyuncs.com/qiluo-images/openclaw:latest openclaw:latest
Q5:容器频繁重启
现象:docker compose ps 显示容器状态为 restarting。
解决方案:
bash
# 查看详细错误日志docker compose logs --tail 50 openclaw-gateway# 常见原因:配置错误、端口冲突、内存不足
Q6:如何从本地安装迁移到 Docker?
解决方案:将本地 ~/.openclaw 目录复制到 Docker 数据卷目录:
bash
cp -rf ~/.openclaw /data/openclaw_docker然后修改 docker-compose.yml 中的 volume 挂载指向该目录。
十一、方案对比总结
选择建议:初次接触 Docker 部署的新手,直接使用官方
docker-setup.sh即可。生产环境或有特殊安全需求的用户,建议采用手工 Compose 方案并进行安全加固配置。
十二、从 Docker 到生产环境
完成 Docker 部署后,OpenClaw 已经具备了隔离运行的基础。后续可以根据需要继续深入:
第 10 篇:OpenClaw 模型配置实战——接入更多模型供应商
第 14-18 篇:技能开发——从零创建自己的 Skills 和 Plugins
第 19-22 篇:多平台集成——微信、飞书、Telegram 等渠道接入
第 27 篇:安全配置指南——沙箱隔离、执行审批与权限最小化最佳实践
第 28 篇:监控、日志与调试——OpenClaw 运维完全手册
💡 最终提醒:Docker 部署不是终点,而是安全运行 AI Agent 的起点。建议在生产环境部署前,务必完成第 27 篇中介绍的安全加固配置。如果你的 OpenClaw 需要对外提供公网访问,务必配置 HTTPS 和强身份认证机制,避免将 Gateway 直接暴露在公网。
下一篇预告:我们将进入 OpenClaw 的核心配置阶段——第 10 篇《OpenClaw 模型配置实战》,讲解如何接入阿里云百炼、OpenAI、Ollama 等多种模型供应商,让你的“龙虾”拥有真正的智慧大脑。
索引标签:#OpenClaw #Docker #容器化部署 #安全沙箱 #生产环境 #运维指南
夜雨聆风