OpenClaw 的 Docker Compose 部署,核心就三件事:数据目录挂哪、端口怎么映射、环境变量配什么。很多人在 VPS 上折腾半天跑不起来,十有八九是挂载路径写错,或者端口被宿主机占用了。主机选这篇文章直接拆解这三个配置项,附带一个能直接用的 docker-compose.yml 模板,帮你少走弯路。

OpenClaw Docker Compose 部署前的准备
先确认你的 VPS 装了 Docker 和 Docker Compose。如果还没装,跑下面两行(Debian/Ubuntu 为例):
curl -fsSL https://get.docker.com | sh
sudo apt install docker-compose-plugin -y
然后创建一个干净的目录,比如 `~/openclaw`,后续所有文件都放这里。不要直接在 root 下操作,避免权限混乱。
数据目录挂载:持久化模型和日志
OpenClaw 通常需要保存模型文件、用户数据和运行日志。如果不挂载数据目录,容器删除后数据全丢。在 docker-compose.yml 里通过 `volumes` 字段绑定宿主机目录。
yaml
services:
openclaw:
image: openclaw/openclaw:latest # 以官方仓库标签为准
container_name: openclaw
volumes:
– ./data:/app/data # 模型/数据目录
– ./logs:/app/logs # 日志目录
– ./config:/app/config # 配置文件目录
关键点:
• 宿主机目录用相对路径 `./data`,会自动创建在 `~/openclaw/data` 下,方便迁移。
• 容器内路径 `/app/data` 需要根据官方文档确认,不同版本可能不同。建议先 `docker inspect` 查看默认路径,或者直接看 GitHub 上的 Dockerfile。
• 如果数据目录权限不对,容器启动会报 `Permission denied`。解决办法:`sudo chown -R 1000:1000 ./data`(假设容器内用户 UID 1000)。
端口映射:避免冲突和暴露公网
OpenClaw 默认监听在 8080 端口(假设),你需要映射到宿主机的一个端口。注意两点:一是不要用 80/443 直接映射(除非你配了反向代理),二是确保宿主机端口没被占用。
yaml
ports:
– "8080:8080" # 宿主机端口:容器端口
坑:如果宿主机 8080 已经被其他服务占用,改成 `"9090:8080"`。另外,千万别把管理后台端口直接暴露到公网。建议只监听 `127.0.0.1`,配合 Nginx 反代加 HTTPS。
yaml
ports:
– "127.0.0.1:8080:8080" # 仅本地访问
环境变量配置:API Key 和运行模式
OpenClaw 通常需要配置 API Key(调用外部模型)、运行模式(开发/生产)等。通过 `environment` 或 `env_file` 传入。
yaml
environment:
– CLAUDE_API_KEY=${CLAUDE_API_KEY} # 从宿主环境变量读取
– OPENAI_API_KEY=${OPENAI_API_KEY}
– MODE=production
– LOG_LEVEL=info
安全提醒:不要在 docker-compose.yml 里硬编码 API Key。建议创建一个 `.env` 文件放在同目录下,内容如下:
CLAUDE_API_KEY=sk-xxxx
OPENAI_API_KEY=sk-xxxx
然后在 compose 里用 `env_file: .env` 加载。`.env` 文件要加入 `.gitignore`,防止泄露。
完整的 docker-compose.yml 示例
yaml
version: '3.8'
services:
openclaw:
image: openclaw/openclaw:latest
container_name: openclaw
restart: unless-stopped
volumes:
– ./data:/app/data
– ./logs:/app/logs
– ./config:/app/config
ports:
– "127.0.0.1:8080:8080"
env_file:
– .env
environment:
– MODE=production
– LOG_LEVEL=info
保存为 `docker-compose.yml`,然后执行:
docker compose up -d
查看日志确认启动正常:
docker compose logs -f
老鸟叮嘱
•先看日志,别急着改配置。如果容器启动失败,`docker compose logs` 会告诉你具体错误:端口被占、目录权限、环境变量缺失等。
•数据目录权限:很多镜像用非 root 用户运行,挂载的目录必须对该用户可写。如果不知道 UID,可以进容器执行 `id` 命令,或者直接 `chmod 777`(不推荐生产环境)。
•生产环境加反向代理:用 Nginx 或 Caddy 把 `127.0.0.1:8080` 反代到域名,并配置 SSL。不要裸奔公网端口。
•定期备份数据目录:`./data` 下的模型和数据库文件是核心,用 cron 任务打包到其他位置。
FAQ
Q1: OpenClaw 容器启动后访问不了,怎么办?
A: 先确认端口映射是否正确,运行 `docker compose ps` 看端口是否监听。然后检查防火墙:`sudo ufw status` 或 `iptables -L`。如果是本地监听,需要通过反向代理访问。
Q2: 数据目录挂载后容器内没权限写入?
A: 查看容器内用户 UID:`docker exec openclaw id`。然后修改宿主机目录所有者:`sudo chown -R UID:GID ./data`。或者直接给 777 权限临时测试。
Q3: 环境变量不生效,日志显示 API Key 为空?
A: 检查 `.env` 文件格式,不要加引号,每行一个 `KEY=VALUE`。确保 `docker compose up -d` 时当前目录包含 `.env` 文件。或者直接在 `environment` 里写死测试。
Q4: 我想换成其他端口,比如 9090,怎么改?
A: 修改 `ports` 部分第一段,例如 `"9090:8080"`。注意如果之前用 `127.0.0.1:8080:8080`,也要同步改:`"127.0.0.1:9090:8080"`。改完后 `docker compose down && docker compose up -d`。
Q5: 容器重启后数据还在吗?
A: 只要数据目录正确挂载,容器删除重建数据都在。但要注意,如果没挂载 `./config`,配置文件可能会丢失,所以建议把所有持久化目录都挂出来。
Q6: 能不能用 Docker Compose 同时部署多个 OpenClaw 实例?
A: 可以,每个实例用不同的容器名、端口映射和数据目录。但注意资源消耗,VPS 内存不够容易 OOM。
OpenClaw 的 Docker Compose 部署并不复杂,核心是把数据目录、端口和环境变量这三块理清楚。挂载路径写对、端口避开冲突、API Key 别硬编码,基本一次就能跑通。如果启动后还有问题,先看日志,大多数坑都在日志里写着。
—
**相关阅读:**
– [Hermes Agent VPS 部署教程:Docker Compose 安装和初始化配置](https://www.zhujixuan.com/jishujiaocheng/9872.html)
– [VPS 部署 AI 工具需要哪些基础?Linux、Docker、Nginx 和域名配置入门](https://www.zhujixuan.com/jishujiaocheng/9747.html)
– [OpenClaw 常驻运行教程:systemd、PM2 与 Docker Compose 怎么选](https://www.zhujixuan.com/jishujiaocheng/9780.html)
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9771.html 商家投稿邮箱:zhujixuanblog@qq.com
