OpenClaw 企业定制 私人订制工作流 优化运维 openclaw记忆优化 问题咨询解决 请加微信交流
Docker是部署Hermes最干净的方式,不需要在机器上安装Python等任何依赖,一行命令跑起来。容器化部署适合生产环境,也方便迁移和备份。这篇讲清楚Docker部署的两种方式、配置方法、数据持久化、以及常见问题解决。
为什么用Docker部署
相比直接在系统上安装,Docker部署有几个明显优势:
- 零依赖:不需要安装Python、pip、系统库等
- 环境隔离:不污染宿主机系统环境
- 部署简单:一行命令搞定
- 迁移方便:导出镜像备份,导入恢复
- 版本控制:可以指定任意版本
- 清理容易:删除容器和镜像即可完全清除
推荐生产环境使用Docker部署。
方式一:直接运行
最简单的Docker运行方式:
docker run -it --rm -v ~/.hermes:/home/hermes/.hermes -e OPENROUTER_API_KEY=sk-or-v1-xxx nousresearch/hermes-agent:latest
参数说明
- -it:交互模式,保留终端连接
- –rm:退出后自动删除容器
- -v ~/.hermes:/home/hermes/.hermes:挂载配置目录,重要!
- -e OPENROUTER_API_KEY=xxx:设置API Key环境变量
首次运行会做什么
- 从Docker Hub拉取镜像
- 创建并启动容器
- 加载配置目录
- 启动Hermes Agent
方式二:docker-compose(推荐)
docker-compose管理更方便,适合长期运行:
创建docker-compose.yml
version: '3.8'
services:
hermes:
image: nousresearch/hermes-agent:latest
container_name: hermes-agent
restart: unless-stopped
ports:
- "3000:3000"
environment:
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
- TZ=Asia/Shanghai
volumes:
- ~/.hermes:/home/hermes/.hermes
stdin_open: true
tty: true
创建.env文件
# API Keys
OPENROUTER_API_KEY=sk-or-v1-xxx
TELEGRAM_BOT_TOKEN=xxx
# 其他配置
TZ=Asia/Shanghai
启动命令
# 启动(后台运行)
docker-compose up -d
# 查看状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 停止
docker-compose down
重启和更新
# 重启
docker-compose restart
# 更新镜像
docker-compose pull
docker-compose up -d
# 完全重建
docker-compose down
docker-compose up -d
数据持久化
容器里的数据默认不保存,关机就消失。需要挂载目录:
必须挂载的目录
~/.hermes/
config.yaml # 配置文件,必需
memory/ # 记忆数据,必须保留
skills/ # 技能文件
logs/ # 日志
audit.log # 审计日志
完整挂载示例
docker run -it --rm -v ~/.hermes:/home/hermes/.hermes -v ~/.ssh:/home/hermes/.ssh:ro -v /path/to/workspace:/workspace:ro -e OPENROUTER_API_KEY=sk-or-v1-xxx nousresearch/hermes-agent:latest
权限说明
容器内进程以hermes用户运行,确保挂载的目录有正确权限:
# 确保目录权限
chmod 755 ~/.hermes
# 如果需要写入
chmod 755 ~/projects
网络配置
开启完整网络访问
# 使用主机网络模式
docker run -it --rm --network host -v ~/.hermes:/home/hermes/.hermes nousresearch/hermes-agent:latest
HTTP代理配置
docker run -it --rm -e HTTP_PROXY=http://proxy.example.com:8080 -e HTTPS_PROXY=http://proxy.example.com:8080 -e NO_PROXY=localhost,127.0.0.1 -v ~/.hermes:/home/hermes/.hermes nousresearch/hermes-agent:latest
指定DNS
docker run -it --rm --dns 8.8.8.8 --dns 8.8.4.4 -v ~/.hermes:/home/hermes/.hermes nousresearch/hermes-agent:latest
资源限制
可以限制容器使用的资源:
# 内存限制
docker run -it --rm --memory="2g" --memory-swap="2g" -v ~/.hermes:/home/hermes/.hermes nousresearch/hermes-agent:latest
# CPU限制
docker run -it --rm --cpus="2" -v ~/.hermes:/home/hermes/.hermes nousresearch/hermes-agent:latest
构建自定义镜像
如果需要预装额外依赖,可以构建自定义镜像:
Dockerfile
cat > Dockerfile << 'EOF'
FROM nousresearch/hermes-agent:latest
# 安装额外依赖
RUN pip install --no-cache-dir pandas numpy matplotlib
# 复制自定义配置
COPY config.prod.yaml /home/hermes/.hermes/config.yaml
# 设置工作目录
WORKDIR /workspace
# 启动命令
CMD ["hermes", "chat"]
EOF
构建和运行
# 构建镜像
docker build -t my-hermes:1.0 .
# 运行
docker run -it --rm -v ~/.hermes:/home/hermes/.hermes my-hermes:1.0
Gateway模式部署
Docker里运行Gateway,同时服务多个消息平台:
docker run -it --rm -p 3000:3000 -v ~/.hermes:/home/hermes/.hermes -e TELEGRAM_BOT_TOKEN=xxx -e DISCORD_BOT_TOKEN=yyy -e SLACK_BOT_TOKEN=zzz nousresearch/hermes-agent:latest gateway
数据备份和恢复
备份配置和数据
# 备份整个配置目录
tar -czvf hermes-backup-$(date +%Y%m%d).tar.gz ~/.hermes/
# 查看备份
ls -la hermes-backup-*.tar.gz
恢复备份
# 解压到临时目录
tar -xzvf hermes-backup-20240101.tar.gz -C /tmp/
# 复制到目标位置
cp -r /tmp/.hermes/* ~/.hermes/
# 重启容器
docker-compose restart
增量备份
# 只备份记忆数据(增量最大的部分)
tar -czvf hermes-memory-$(date +%Y%m%d).tar.gz ~/.hermes/memory/
多环境配置
# .env.dev - 开发环境
OPENROUTER_API_KEY=sk-or-v1-dev-xxx
NODE_ENV=development
LOG_LEVEL=debug
# .env.prod - 生产环境
OPENROUTER_API_KEY=sk-or-v1-prod-xxx
NODE_ENV=production
LOG_LEVEL=info
# 使用指定环境
docker-compose --env-file .env.prod up -d
常见问题
容器内无法访问网络?
检查是否开启了--network host,或者容器内DNS配置是否正确。尝试加--dns 8.8.8.8参数。
配置文件挂载后不生效?
确保挂载路径正确:-v ~/.hermes:/home/hermes/.hermes。注意容器内路径是/home/hermes/.hermes。
权限被拒绝?
容器内用户是hermes(uid 1000),确保~/.hermes目录权限755,子文件权限644或755。
# 修复权限
chown -R 1000:1000 ~/.hermes
数据丢失?
没有挂载volume会导致所有数据丢失。每次都要确保~/.hermes目录挂载了。
端口被占用?
检查3000端口是否被占用:lsof -i:3000。或者改用其他端口:-p 3001:3000。
容器无法启动?
查看日志诊断:docker logs hermes-agent或docker-compose logs hermes。
总结
Docker是最干净的部署方式:
- 一行命令跑起来
- 不需要Python等任何依赖
- 环境隔离不污染系统
- 迁移备份非常方便
- 建议用docker-compose管理
生产环境推荐docker-compose方式,方便管理。








暂无评论内容