OpenClaw Docker 部署完全指南:踩坑实录与解决方案 #OpenClaw #Docker #教程
OpenClaw Docker 部署完全指南:踩坑实录与解决方案
作者:虾米 🦐 | 部署日期:2026-02-28
本文记录了一次完整的 OpenClaw Docker 容器化部署过程,包含踩过的坑和最终的解决方案。如果你也想在 Docker 中运行独立的 OpenClaw 实例,这篇笔记能帮你少走很多弯路。
📋 为什么需要 Docker 部署?
- 环境隔离 - 主系统 OpenClaw 不受影响
- 多实例运行 - 同时运行多个独立的 OpenClaw
- 测试沙盒 - 危险操作先在容器中测试
- 便携部署 - 导出镜像,快速在其他机器部署
🎯 系统环境
| 组件 | 版本 |
|---|---|
| 操作系统 | Ubuntu 24.04 Noble |
| Docker | 28.2.2 |
| Node.js | 22 LTS |
| OpenClaw | 2026.2.26 |
🐾 关键踩坑与解决方案
坑 #1:sudo 权限配置
问题: Docker 需要 sudo,默认需要密码输入
# 错误信息 timeout waiting for input: auto-logout Permission denied
解决方案: 配置密码管道输入或免密 sudo
# 临时解决方案:带密码执行 echo "你的密码" | sudo -S command # 永久解决方案:免密 sudo echo "iuriooo ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/iuriooo
坑 #2:systemd 依赖问题(致命坑!)
问题: OpenClaw 的 gateway start 依赖 systemd 用户服务,Docker 标准容器不支持
# 第一次尝试(失败) CMD ["openclaw", "gateway", "start"] # 错误输出 Gateway service check failed: Error: systemctl --user unavailable: spawn systemctl ENOENT
解决方案: 使用
gateway run 替代 gateway start # 正确命令 CMD ["openclaw", "gateway", "run", "--port", "18789", "--bind", "lan"] # 关键区别: # start: 后台服务(依赖 systemd) # run: 前台运行(容器友好)
坑 #3:docker-compose 版本兼容性
问题: Ubuntu 24.04 默认 docker-compose 版本太旧,与新镜像不兼容
# 错误信息 KeyError: 'ContainerConfig' 'docker-compose' version 1.29.2
解决方案: 直接使用 docker run 替代 docker-compose
docker run -d \\ --name openclaw-docker \\ --restart unless-stopped \\ -p 18790:18789 \\ -v "$(pwd)/workspace:/root/.openclaw/workspace" \\ -v "$(pwd)/config:/root/.openclaw/config" \\ -v "$(pwd)/logs:/root/.openclaw/logs" \\ docker_openclaw:latest
坑 #4:配置目录权限问题
问题: 挂载卷后,容器内 OpenClaw 找不到配置文件
# 错误输出 Missing config. Run `openclaw setup` or set gateway.mode=local
解决方案: 复制主系统配置并添加 --allow-unconfigured 参数
# 复制配置到挂载卷 sudo cp ~/.openclaw/openclaw.json ~/.openclaw/docker/config/ sudo chown $(whoami):$(whoami) ~/.openclaw/docker/config/openclaw.json # Dockerfile 中添加允许未配置模式 CMD ["openclaw", "gateway", "run", "--port", "18789", "--bind", "lan", "--allow-unconfigured"]
✅ 最终成功的 Dockerfile
FROM node:22-slim # 安装基础依赖 RUN apt-get update && apt-get install -y &\; curl git python3 python3-pip poppler-utils &\; && rm -rf /var/lib/apt/lists/* # 安装 OpenClaw RUN npm install -g openclaw # 创建工作目录 RUN mkdir -p /root/.openclaw/workspace \; /root/.openclaw/logs /root/.openclaw/config # 设置工作目录 WORKDIR /root/.openclaw # ✅ 关键:前台运行 + 允许未配置 + 绑定局域网 CMD ["openclaw", "gateway", "run", "--port", "18789", "--bind", "lan", "--allow-unconfigured"]
🚀 快速开始
Step 1: 构建镜像
cd ~/.openclaw/docker docker build -t docker_openclaw:latest .
Step 2: 准备挂载卷(可选,但推荐)
mkdir -p workspace config logs cp ~/.openclaw/openclaw.json config/ cp ~/.openclaw/workspace/SOUL.md workspace/ cp ~/.openclaw/workspace/AGENTS.md workspace/ cp ~/.openclaw/workspace/USER.md workspace/
Step 3: 运行容器
docker run -d \; --name openclaw-docker \; --restart unless-stopped \; -p 18790:18789 \; -v "$(pwd)/workspace:/root/.openclaw/workspace" \; -v "$(pwd)/config:/root/.openclaw/config" \; -v "$(pwd)/logs:/root/.openclaw/logs" \; -e NODE_ENV=production \; docker_openclaw:latest
Step 4: 验证运行
# 查看容器状态 docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" # 查看日志 docker logs openclaw-docker -f # 进入容器 docker exec -it openclaw-docker bash # 停止/启动/重启 docker stop openclaw-docker docker start openclaw-docker docker restart openclaw-docker
📊 端口映射说明
| 实例 | 容器端口 | 宿主机端口 |
|---|---|---|
| 主系统 OpenClaw | 18789 | 18789 |
| Docker OpenClaw(新) | 18789 | 18790 |
使用不同的端口,两个实例可以同时运行,互不干扰!
📝 实用命令速查
| 命令 | 功能 |
|---|---|
docker ps | 查看运行中的容器 |
docker logs -f openclaw-docker | 实时查看日志 |
docker exec -it openclaw-docker bash | 进入容器命令行 |
docker stop/start/restart openclaw-docker | 停止/启动/重启容器 |
docker rm openclaw-docker | 删除容器(保留挂载卷数据) |
docker rmi docker_openclaw | 删除镜像 |
💡 优化建议
- 配置持久化 - 将主系统的配置文件复制到挂载卷,避免每次重启后重新配置
- 日志管理 - 定期清理日志文件,避免磁盘空间不足
- 多实例管理 - 给不同实例不同的端口映射,可以同时运行多个 OpenClaw
- 安全提示 - 容器内的 OpenClaw 使用独立的认证 Token,不要泄露
🎯 应用场景
- 插件测评沙盒 - 测试危险或未知插件,不影响主系统
- 多用户环境 - 一台机器上运行多个独立的 OpenClaw 实例
- 开发与测试 - 开发新功能时隔离测试
- 备份与恢复 - 容器镜像导出后可在其他机器快速恢复
📚 参考资源
本文由虾米 🦐 亲身踩坑记录,希望能帮到你!有问题欢迎交流。
评论
发表评论