什么是 Hermes Agent 以及为什么 Docker 是运行它的正确方式
爱马仕代理 是来自 Nous Research 的一款自主人工智能代理,具有内置学习循环。与每次运行都重新开始的无状态代理不同,Hermes 构建了一个持久的技能库。每项完成的任务都可以成为可重复使用的技能,随着时间的推移,使代理的能力显着增强。
运行 Hermes 裸机是可行的,但它会带来真正的问题:
- 技能状态和对话历史记录与单个机器的文件系统相关联
- 在 VPS 重建过程中重现环境需要手动工作
- 没有进程隔离意味着失控的子进程可能会影响您的主机
Docker 解决了这三个问题。正确配置的容器为您提供可移植性、隔离性,并且通过正确的卷策略,可以在映像更新后保持持续的学习状态。
两种 Docker 模式说明 - 开始之前选择
大多数指南完全跳过此决定并跳转到 docker run。不。这两种模式具有明显不同的安全性和操作配置文件。
| 模式一:Hermes 集装箱内 | 模式2:Docker作为终端沙箱 | |
|---|---|---|
| 什么在哪里运行 | Hermes + 它的运行时位于容器内 | Hermes运行在主机上; Docker 为终端任务创建一次性沙箱容器 |
| 隔离 | 赫尔墨斯本身是孤立的 | 仅隔离终端任务的输出 |
| 状态管理 | 卷处理一切 | 主机文件系统保存 Hermes 状态 |
| 推荐用于 | VPS制作、团队部署 | 本地开发,快速实验 |
| 需要 DOCKER_HOST | 不 | 是(同级容器设置) |
经验法则: 如果您要部署到 VPS 或想要可重现的生产环境,请使用模式 1。如果您在本地运行 Hermes 并希望它启动 Docker 沙箱来执行代码,请使用模式 2。
模式 1 — Hermes 在容器内运行
Hermes 及其所有依赖项都位于图像内。您可以通过命名卷来管理状态。容器重新启动策略使其在重新启动后保持活动状态。这是最常见的生产模式。
- 与主机完全分离——不会意外写入您的机器
- 完全的便携性;使用相同的撰写文件在任何地方重新部署
- 开销比本地运行稍高
模式 2 — Docker 作为终端后端沙箱
在这里,Hermes 直接在主机(或容器中)运行,并调用 Docker 守护进程来启动临时容器以执行 shell。您可以通过设置 DOCKER_HOST 来配置它,以便 Hermes 可以访问守护进程:
export DOCKER_HOST=unix:///var/run/docker.sock # Linux
export DOCKER_HOST=tcp://host.docker.internal:2375 # Windows/Mac (Docker Desktop)
安全说明: 在容器内安装 Docker 套接字可授予对主机的近 root 访问权限。仅在您完全信任容器工作负载的环境中执行此操作。
先决条件和环境设置
在拉取任何镜像之前,请确认:
- Docker 引擎 24+ 或者 Docker 桌面版 4.26+
- 准备好 LLM API 密钥:OpenAI (
OPENAI_API_KEY)、Anthropic (Anthropic_API_KEY) 或本地 Ollama 端点 - 端口 443 上的出站互联网访问(用于 LLM API 调用)
- 至少 2 GB 内存 分配给容器(对于 Ollama 支持的设置,建议使用 4 GB)
Windows 特定设置(Docker 桌面 + WSL2)
Windows 是大多数 Docker 部署悄然崩溃的地方。注意这些:
卷路径转换
Windows 上的 Docker Desktop 通过 WSL2 转换路径。在撰写文件中使用 Linux 样式路径 - 避免在撰写 volumes: 定义中使用 Windows 样式路径 (C:\Users\...)。
# Correct — Docker Desktop translates this automatically
volumes:
- hermes_data:/root/.hermes
套接字与命名管道
在 Windows 上,Docker 公开命名管道,而不是 Unix 套接字。对于模式 2,设置:
DOCKER_HOST=npipe:////./pipe/docker_engine
WSL2 内存限制
Windows 上的 Docker Desktop 默认 WSL2 为主机 RAM 的 50%。如果 Hermes 感觉运行缓慢,请在您的 Windows 用户配置文件中添加 .wslconfig :
[wsl2]
memory=4GB
processors=2
快速入门——5分钟用Docker运行Hermes Agent
拉取官方镜像并运行安装向导:
# Pull the latest image
docker pull nousresearch/hermes-agent:latest
# Run with a persistent volume for state
docker run -it \
-v hermes_home:/root/.hermes \
-e OPENAI_API_KEY=your_key_here \
nousresearch/hermes-agent:latest
这 设置向导 首次运行时启动。它会提示您:
- 选择您的 LLM 提供商(OpenAI、Anthropic、Ollama 或自定义端点)
- 输入您的 API 密钥或端点 URL
- 配置终端后端(本机或 Docker 沙箱)
完成后,验证会话是否正常工作:
> hello
Hermes 应该响应并确认其技能库已初始化。如果您在新容器上看到 skill store empty,这是预期的 - 技能通过使用而积累。
使用 Docker Compose 进行生产部署
裸 docker run 命令适用于测试。对于任何持久性的事情,请使用 Compose。
version: "3.9"
services:
hermes:
image: nousresearch/hermes-agent:latest
container_name: hermes-agent
restart: unless-stopped
stdin_open: true
tty: true
environment:
# Use environment secrets — never hardcode keys in compose files
OPENAI_API_KEY: ${OPENAI_API_KEY}
Anthropic_API_KEY: ${Anthropic_API_KEY}
HERMES_LOG_LEVEL: info
volumes:
- hermes_home:/root/.hermes # Config + conversation history
- hermes_skills:/root/.hermes/skills # Skill store — see next section
deploy:
resources:
limits:
memory: 2G
cpus: "1.5"
healthcheck:
test: ["CMD", "hermes", "--health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
hermes_home:
hermes_skills:
将您的 API 密钥存储在 .env 文件中(从不提交版本控制):
OPENAI_API_KEY=sk-...
Anthropic_API_KEY=sk-ant-...
在容器重建过程中保留 Hermes 技能
这是最容易被忽视的生产问题。爱马仕商店将技能与一般配置分开学习。显式挂载这些路径:
| 小路 | 包含 | 必须坚持吗? |
|---|---|---|
| /root/.hermes | 配置、会话历史记录 | 是的 |
| /root/.hermes/技能 | 学到的技能库 | 批判的 |
| /root/.hermes/内存 | 长期记忆存储 | 是的 |
更新图像时:
docker compose pull
docker compose up -d # Named volumes persist automatically
高级拓扑 - 主机-Docker(同级容器)设置
当您希望 Hermes 编排同级容器以实现隔离的代码执行时,可以使用此架构 - 例如,安全地运行用户提交的代码。
┌─────────────────────────────────┐
│ Docker Host │
│ │
│ ┌──────────────┐ │
│ │ hermes-agent │◄──socket──────┤── /var/run/docker.sock
│ │ container │ │
│ └──────┬───────┘ │
│ │ docker run (sibling) │
│ ┌──────▼───────┐ │
│ │ sandbox-1 │ (ephemeral) │
│ └──────────────┘ │
└─────────────────────────────────┘
为该拓扑编写配置:
services:
hermes:
image: nousresearch/hermes-agent:latest
restart: unless-stopped
environment:
OPENAI_API_KEY: ${OPENAI_API_KEY}
DOCKER_HOST: unix:///var/run/docker.sock
HERMES_TERMINAL_BACKEND: docker
volumes:
- hermes_home:/root/.hermes
- /var/run/docker.sock:/var/run/docker.sock # Socket mount
group_add:
- "999" # docker group GID — adjust to match your host
生产安全注意事项:
- 使用 Docker 套接字代理(例如
Tecnativa/docker-socket-proxy)限制套接字访问,以限制 Hermes 可以进行哪些 API 调用 - 切勿在多租户环境中暴露 Docker 套接字
- 如果需要更强的主机隔离,请在 Docker 守护进程上设置
userns-remap
通过 Telegram Bot 将 Hermes 连接到 Claude
目前没有书面指南涵盖这一点 - 它仅以视频形式显示。这是完整的设置。
第 1 步:创建 Telegram 机器人
在 Telegram 上与 @BotFather 交谈:
/newbot
→ Name: Hermes Agent
→ Username: your_hermes_bot
→ Save the token: 123456:ABC-DEF...
第 2 步:获取您的 Claude OAuth 令牌
在 Anthropic 控制台中,生成具有 claude-3-5-sonnet 或 claude-opus-4 范围的 API 密钥。将其设置为 Anthropic_API_KEY。
第 3 步:将 Telegram 配置添加到您的撰写文件中
environment:
Anthropic_API_KEY: ${Anthropic_API_KEY}
HERMES_LLM_PROVIDER: Anthropic
HERMES_TELEGRAM_TOKEN: ${TELEGRAM_BOT_TOKEN}
HERMES_TELEGRAM_ALLOWED_USERS: "your_telegram_user_id"
第 4 步:查找您的 Telegram 用户 ID
Telegram 上的消息 @userinfobot — 它会回复您的数字用户 ID。
第 5 步:启动机器人
docker compose up -d
在 Telegram 上向您的机器人发送消息。 Hermes 将通过 Claude 后端进行响应。 HERMES_TELEGRAM_ALLOWED_USERS 限制确保只有您的帐户可以与代理交互。
多架构部署(ARM64 / Oracle 免费套餐 / Raspberry Pi)
nousresearch/hermes-agent 映像作为多架构清单提供。支持 ARM64 — 在 ARM 主机上显式拉取它:
# Oracle Free Tier (Ampere A1) or Raspberry Pi 4/5
docker pull --platform linux/arm64 nousresearch/hermes-agent:latest
# Verify the architecture
docker inspect nousresearch/hermes-agent:latest | grep Architecture
Oracle 始终免费套餐 是 2026 年 Hermes 的最佳零成本托管选项。Ampere A1 实例为您提供 4 个 ARM64 内核和 24 GB RAM — 对于与远程 LLM 提供商进行持久 Hermes 部署来说绰绰有余。
已知的 ARM 特定问题:
- 一些 Ollama 模型量化 (Q8) 在 ARM 上运行速度较慢;更喜欢 Q4_K_M 进行本地推理
- 如果您点击
exec format error,请确认您正在使用--platform linux/arm64标志 - Apple Silicon 上的 Docker Desktop 原生处理 ARM — 无需平台标志
管理复杂的代理工作流程? EasyClaw 可以满足您的需求
在 Docker 中运行 Hermes Agent 是一个强大的设置,但编排多个 AI 代理、管理技能管道以及在复杂的工作流程中维护持久内存是大多数团队遇到困难的地方。 EasyClaw 是一个桌面原生 AI 代理平台,专为以下目的而构建:生产级多代理协调,无需担心基础设施问题。
- 多代理管道的可视化编排——无 YAML 争论
- 在会话中保留的持久记忆和技能库
- 完全在您的计算机上运行 - 无云锁定,无数据泄漏
- 与 Telegram、Slack 和自定义 Webhooks 的本机集成
- 内置调度、监控和日志检查
排除常见的 Hermes Agent Docker 故障
您最有可能遇到的故障的参考表:
| 失败 | 症状 | 诊断 | 使固定 |
|---|---|---|---|
| 图片拉取错误 | manifest unknown |
docker pull nousresearch/hermes-agent:latest 失败 |
检查 Docker Hub 当前有效标签;尝试 --platform linux/amd64 |
| 卷权限被拒绝 | 容器因 /root/.hermes 上的权限错误而退出 |
docker run --rm -v hermes_home:/data busybox ls -la /data |
docker volume rm hermes_home 并重新创建,或通过 busybox init 容器使用 chown 进行修复 |
| LLM认证失败 | 日志中的 401 Unauthorized |
docker logs hermes-agent | grep -i auth |
验证 API 密钥在 .env 中设置正确;检查前导/尾随空格 |
| 设置向导挂起 | 向导提示但不接受输入 | 不适用 | 确保在 docker run 上设置 -it 标志;撰写需要 stdin_open: true + tty: true |
| 法学硕士无法到达 | Connection refused 到 Ollama 或本地端点 |
docker exec hermes-agent curl http://host.docker.internal:11434 |
使用host.docker.internal代替localhost;如果需要,添加 --add-host |
| 技能没有坚持下去 | 重建后技能库为空 | docker volume ls — 检查卷是否存在 |
确保 hermes_skills 卷已命名(不是绑定安装)并组成文件引用它 |
| ARM 执行格式错误 | exec /usr/local/bin/hermes: exec format error |
docker inspect image | grep Architecture |
使用 --platform linux/arm64 重新拉取 |
| 套接字权限被拒绝 | permission denied /var/run/docker.sock |
主机上的 ls -la /var/run/docker.sock |
通过compose中的group_add将容器用户添加到docker组 |
常见问题解答
问:我的 Hermes 技能能在 docker compose pull && up -d 中幸存吗?
答:是的 - 只要您的技能存储在命名卷(而不是绑定安装或匿名卷)中。本指南中的 compose 设置使用 hermes_skills 作为命名卷,Docker 在映像更新时自动保留该卷。
问:我可以在同一主机上运行多个 Hermes 实例吗?
答:是的。为每个实例提供一个不同的 container_name 和单独的命名卷。您还需要确保它们不会在任何公开的端口上发生冲突。每个实例都会积累自己独立的技能库。
问:Hermes Agent 是否支持通过 Docker 内的 Ollama 本地 LLM?
答:是的。在同一个组合堆栈中将 Ollama 作为单独的服务运行,并将 Hermes 指向 http://Ollama:11434 (使用 Docker 的内部 DNS)。避免从容器内部指向 localhost — 对于主机端 Ollama 使用服务名称或 host.docker.internal。
问:将 Docker 套接字挂载到 Hermes 容器中安全吗?
答:套接字安装授予容器对主机的近 root 权限。在您控制所有工作负载的单用户 VPS 上这是可以接受的。在共享或多租户环境中,使用套接字代理(例如 Tecnativa/docker-socket-proxy)仅将 Hermes 需要的 API 调用列入白名单。
问:生产 Hermes 部署的最低服务器规格是多少?
答:对于远程 LLM 提供商(OpenAI/Anthropic),1 个 vCPU 和 2 GB RAM 是可行的。对于自托管 Ollama 后端,您需要至少 8 GB RAM 和相当现代的 CPU。 Oracle 的 Ampere A1 免费套餐(4 核、24 GB)以零成本轻松涵盖这两种场景。
问:如何备份赫尔墨斯学到的技能和记忆?
答:使用 docker run --rm -v hermes_skills:/data -v $(pwd):/backup busybox tar czf /backup/hermes-skills-backup.tar.gz /data。在主机上将其作为计划的 cron 作业运行,以便在任何映像更新之前进行自动备份。
最后的想法:清单和后续步骤
学习循环是 Hermes 与您在 Docker 中运行的所有其他代理的区别所在。上面的设置确保循环实际上 积累 - 不会重置 - 每次发布更新时。
在调用部署生产就绪之前,请确认:
- ☐ 为
hermes_home和hermes_skills创建的命名卷 - ☐ API 密钥存储在
.env中,未在 compose 中硬编码 - ☐
restart: unless-stopped策略处于活动状态 - ☐ 健康检查通过:
docker inspect hermes-agent --format='{{.State.Health.Status}}' - ☐ 配置日志轮换(
max-size、max-file) - ☐ 设置资源限制以防止内存耗尽
- ☐ 设置向导已完成并验证了第一个聊天会话
- ☐ (如果模式 2)确认 Docker 套接字安装并考虑套接字代理
立即获得价值的后续步骤:
- 运行一些实际任务 - 文件摘要、代码审查、网络研究 - 为技能库播种
- 完成 10-15 个任务后,运行
hermes skills list查看学到了什么 - 查看 Nous Research GitHub 以获取涵盖自定义技能模板和内存调整的代理配置文档
- 如果您使用 Oracle 免费套餐,请设置基于 cron 的
docker compose pull && docker compose up -d来实现零停机图像更新,同时保留学习状态