五、部署和运维问题
📌 本节包含 10 个问题:Q46: Docker 容器立即退出 | Q47: 容器内存过高 | Q48: 数据卷备份 | Q49: 自动重启 | Q50: 查看日志 | Q51: 监控运行状态 | Q52: 磁盘空间清理 | Q53: 多服务器部署 | Q54: 设置 HTTPS | Q55: 自动更新
Q1: Docker 容器启动后立即退出
现象: 执行 docker compose up -d 后,运行 docker ps 看不到 OpenClaw 容器,用 docker ps -a 查看发现容器状态为 Exited (1) 或其他非零退出码。
原因: 配置文件缺失、端口冲突、或者环境变量没设置。
解决方案:
bash
# 第一步:查看容器退出日志
docker compose logs openclaw
# 第二步:常见原因排查
# 原因 1:配置文件不存在
ls ./data/openclaw.json # 确认挂载的配置文件存在
# 原因 2:端口被占用
lsof -i :18789
# 如果被占用,修改 docker-compose.yml 中的端口映射
# 原因 3:环境变量缺失
# 确认 .env 文件存在且包含必要变量
cat .env
# 第三步:用前台模式启动,方便看日志
docker compose up # 不加 -dQ2: Docker 容器内存占用过高
现象: 运行 docker stats 发现 OpenClaw 容器的内存使用量持续增长,从几百 MB 涨到好几 GB,甚至导致宿主机变卡或 OOM(Out of Memory)被系统杀掉。
原因: 连接了太多平台、会话数据积累、或者存在内存泄漏。
v2026.4.20+ 默认启用了会话维护(Sessions/Maintenance)的条目上限和基于时间的自动清理,可以有效防止 OOM。如果你从旧版本升级,建议确认此特性已启用。
解决方案:
bash
# 查看容器资源使用
docker stats openclaw
# 方案一:限制容器内存
# 在 docker-compose.yml 中添加:
# deploy:
# resources:
# limits:
# memory: 1G
# 方案二:清理会话数据
docker exec openclaw openclaw sessions cleanup
# 方案三:减少同时连接的平台数量
# 方案四:定期重启容器(临时方案)
# 配置 crontab
# 0 4 * * * docker compose restart openclawQ3: Docker 数据卷怎么备份?
解决方案:
bash
# 方案一:直接备份挂载目录
tar -czf openclaw-backup-$(date +%Y%m%d).tar.gz ./data/
# 方案二:备份 Docker volume
docker run --rm \
-v openclaw_data:/source \
-v $(pwd):/backup \
alpine tar -czf /backup/openclaw-data.tar.gz -C /source .
# 方案三:自动化备份脚本
# 建议配合 crontab 每天自动备份
# 0 3 * * * /path/to/backup-script.shQ4: Gateway 进程崩溃后怎么自动重启?
解决方案:
bash
# 方案一:安装为 systemd 服务(Linux 推荐)
openclaw daemon
# 这会创建 systemd service,崩溃后自动重启
# 查看服务状态
systemctl status openclaw-gateway
# 方案二:Docker 自动重启
# 在 docker-compose.yml 中设置:
# restart: unless-stopped
# 方案三:用 PM2 管理(Node.js 生态)
npm install -g pm2
pm2 start "openclaw gateway --port 18789" --name openclaw
pm2 save
pm2 startup # 开机自启Q5: 日志在哪里看?怎么排查问题?
解决方案:
bash
# 最直接的方式:前台运行 Gateway 并开启 --verbose
openclaw gateway --port 18789 --verbose
# 所有日志实时输出到终端
# 按关键词过滤(通过管道 grep)
# openclaw gateway --port 18789 --verbose 2>&1 | grep "error"
# Docker 环境
docker compose logs -f openclaw
docker compose logs --tail 100 openclaw
# 日志文件位置(取决于 logging 配置)
# 默认日志输出到 stdout/stderr
# 可以通过 logging.file 配置写入文件
# 调整日志级别(排查问题时用 debug)
openclaw config set logging.level "debug"
# 排查完记得改回来
openclaw config set logging.level "info"Q6: 怎么监控 OpenClaw 的运行状态?
解决方案:
bash
# 内置健康检查
curl http://localhost:18789/health
# 查看详细状态
openclaw status
# 输出示例:
# Gateway: running (uptime: 3d 12h)
# Channels: 3 connected, 0 error
# Sessions: 42 active
# Memory: 256 MB
# CPU: 2%
# 配置外部监控(推荐 UptimeRobot 或类似服务)
# 监控 URL: http://your-server:18789/health
# 检查间隔: 5 分钟Q7: 磁盘空间不足怎么清理?
解决方案:
bash
# 查看 OpenClaw 占用的磁盘空间
du -sh ~/.openclaw/
du -sh ~/.openclaw/*/ # 分目录查看
# 清理会话日志(最占空间的部分)
openclaw sessions cleanup
# 清理旧的记忆日志
find ~/.openclaw/workspace/memory/ -name "*.md" -mtime +60 -delete
# Docker 环境清理
docker system prune -f # 清理无用镜像和容器
docker volume prune -f # 清理无用数据卷(谨慎)
# 查看清理后的空间
du -sh ~/.openclaw/Q8: 怎么在多台服务器上部署?
说明: OpenClaw 目前是单实例架构,不支持原生集群部署。但你可以通过以下方式实现多节点:
bash
# 方案一:每台服务器独立部署,连接不同的平台
# 服务器 A:负责 WhatsApp
# 服务器 B:负责 Telegram + Discord
# 方案二:用反向代理做负载均衡(实验性)
# Nginx 配置示例:
# upstream openclaw {
# server 192.168.1.10:18789;
# server 192.168.1.11:18789 backup;
# }
# 方案三:共享配置和记忆(通过 NFS 或对象存储)
# 把 ~/.openclaw/ 挂载到共享存储Q9: 怎么设置 HTTPS?
解决方案:
bash
# 方案一:用反向代理(推荐)
# Nginx + Let's Encrypt
sudo apt install nginx certbot python3-certbot-nginx
sudo certbot --nginx -d openclaw.yourdomain.com
# Nginx 配置
# server {
# listen 443 ssl;
# server_name openclaw.yourdomain.com;
# location / {
# proxy_pass http://127.0.0.1:18789;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
# }
# 方案二:OpenClaw 内置 TLS
# GatewayTlsConfig 只有 certPath 和 keyPath 两个字段,没有 enabled 开关
# 配置了证书路径即视为启用 TLS
openclaw config set gateway.tls.certPath "/path/to/cert.pem"
openclaw config set gateway.tls.keyPath "/path/to/key.pem"
# 重启 Gateway 使配置生效
openclaw gateway --port 18789Q10: 怎么配置自动更新?
解决方案:
bash
# npm 方式:用 crontab 定期检查更新(更新后需要重启 Gateway)
# 0 2 * * 0 npm update -g openclaw && pkill -f "openclaw gateway" && openclaw gateway --port 18789 &
# Docker 方式:用 Watchtower 自动更新
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--interval 86400 \
openclaw
# 手动检查是否有新版本
openclaw --version
npm view openclaw version