维护咨询 大模型部署 问题解决 技能定制 大模型训练
想在服务器上长期运行Hermes Agent,又不想污染系统环境?Docker是最好的选择。
把Hermes装进容器里,数据持久化、升级不影响、随时可以迁移到其他机器。本文讲清楚怎么用Docker跑Hermes,包括数据持久化、GPU支持、和其他容器的联动。
## 为什么用Docker跑Hermes
环境隔离。 Hermes依赖Python和各种包,跟系统其他服务不混在一起。升级或卸载不会影响系统。
迁移方便。 整套环境打包成镜像,迁移到新服务器只需要拉取镜像加启动,数据不走丢。
多实例。 想跑多个不同配置的Hermes实例?Docker compose一个文件搞定。
资源控制。 可以限制容器用的CPU、内存,防止Hermes占满服务器资源。
—
## 基础Docker部署
前置条件:
Docker安装(Linux上执行):
curl -fsSL https://get.docker.com | bash
systemctl enable docker
systemctl start docker
创建目录结构:
mkdir -p ~/hermes-docker
cd ~/hermes-docker
mkdir -p data/.hermes data/config
Dockerfile:
# ~/hermes-docker/Dockerfile
FROM python:3.11-slim
WORKDIR /app
# 安装系统依赖
RUN apt-get update && apt-get install -y \
curl git bash \
&& rm -rf /var/lib/apt/lists/*
# 安装Hermes Agent
RUN curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
# 创建数据目录
RUN mkdir -p /data/.hermes
# 复制配置(如有)
COPY config.yaml /data/config/
ENV HERMES_HOME=/data/.hermes
WORKDIR /data/.hermes
CMD ["hermes", "chat"]
构建并运行:
cd ~/hermes-docker
docker build -t hermes-agent .
docker run -it --rm \
-v $(pwd)/data:/data \
-e HERMES_HOME=/data/.hermes \
hermes-agent
—
## 数据持久化配置
上面用`-v $(pwd)/data:/data`把容器内的/data映射到宿主机的目录。所有Hermes的数据(配置、记忆、会话)都会保存在宿主机上,容器删除重建不丢数据。
目录结构:
~/hermes-docker/
└── data/
└── .hermes/
├── config.yaml # 配置文件
├── .env # API Key
├── SOUL.md # 人格设定
├── memories/ # 记忆文件
├── sessions/ # 会话历史
└── skills/ # 已安装的Skills
└── config/
└── config.yaml # 额外配置
—
## Docker Compose管理多实例
想同时跑多个不同配置的Hermes实例,用Docker Compose:
# ~/hermes-docker/docker-compose.yml
version: '3.8'
services:
hermes-main:
build: .
container_name: hermes-main
volumes:
- ./data/main:/data
environment:
- HERMES_HOME=/data/.hermes
restart: unless-stopped
# 前台运行,如果需要后台加 tty: true
hermes-coder:
build: .
container_name: hermes-coder
volumes:
- ./data/coder:/data
environment:
- HERMES_HOME=/data/.hermes
profiles:
- coder
restart: unless-stopped
networks:
default:
name: hermes-network
# 启动主实例
docker compose up -d hermes-main
# 启动coder实例(需要时)
docker compose --profile coder up -d hermes-coder
# 查看日志
docker compose logs -f hermes-main
# 停止
docker compose down
—
## GPU支持
如果用Hermes跑需要GPU的任务(如本地LLM推理),需要给容器加GPU支持:
# NVIDIA GPU
docker run --gpus all -it --rm \
-v $(pwd)/data:/data \
-e HERMES_HOME=/data/.hermes \
--runtime=nvidia \
hermes-agent
需要宿主机安装了NVIDIA驱动和nvidia-docker。
—
## Telegram Bot后台运行
想让Telegram Bot 24小时在线,用`–detach`后台运行:
docker run -d --restart unless-stopped \
--name hermes-telegram \
-v $(pwd)/data:/data \
-e HERMES_HOME=/data/.hermes \
hermes-agent \
hermes gateway start
`–restart unless-stopped`保证服务器重启后Bot自动上线。
—
## 升级Hermes
升级容器里的Hermes:
# 方法一:重新构建镜像
cd ~/hermes-docker
docker build -t hermes-agent --no-cache .
docker compose restart hermes-main
# 方法二:进入容器更新
docker exec -it hermes-main bash
hermes update
exit
docker compose restart hermes-main
数据都在volumes里,升级不影响。
—
## 安全注意事项
保护API Key。
不要把.env文件提交到代码仓库。.env应该加到.gitignore:
# .gitignore
data/.hermes/.env
data/.hermes/config.yaml
限制容器权限。
用非root用户运行Hermes:
RUN useradd -m hermes && mkdir -p /data/.hermes && chown -R hermes:hermes /data
USER hermes
网络隔离。
如果服务器上有其他服务,用Docker网络隔离Hermes:
docker network create hermes-net
docker network connect hermes-net hermes-telegram
—
## 常见问题
Q:Docker里能访问宿主机的文件吗?
A:可以。用-v参数把宿主机目录映射到容器里。但容器默认不能访问未映射的路径。
Q:容器里的Hermes能调用宿主机的Docker吗?
A:可以,但需要挂载Docker socket:`-v /var/run/docker.sock:/var/run/docker.sock`。这有安全风险,慎用。
Q:内存限制设多少合适?
A:Hermes本身不吃内存,限制2GB足够。如果跑本地LLM推理,按模型大小设置(7B模型至少8GB,70B模型需要64GB+)。
Q:多个容器里的Hermes能共享Skills吗?
A:可以,把Skills目录也映射到同一个宿主机目录。但建议每个实例有独立的Skills目录,避免版本冲突。
Q:容器里能访问GPU吗?
A:Linux+NVIDIA可以,用–runtime=nvidia。macOS和Windows需要用Docker Desktop的GPU支持,或者直接用宿主机的Hermes。
—
## 相关文章








暂无评论内容