什麼是 Hermes Agent 以及為什麼 Docker 是運行它的正確方式
Hermes Agent 是 Nous Research 的一款自主人工智慧代理,具有內建學習循環。與每次運行都重新開始的無狀態代理不同,Hermes 建立了一個持久的技能庫。每項完成的任務都可以成為可重複使用的技能,隨著時間的推移,使代理人的能力顯著增強。
運行 Hermes 裸機是可行的,但它會帶來真正的問題:
- 技能狀態和對話歷史記錄與單一機器的檔案系統相關聯
- 在 VPS 重建過程中重現環境需要手動工作
- No 進程隔離意味著失控的子進程可能會影響您的主機
Docker 解決了這三個問題。正確配置的容器為您提供可攜性、隔離性,並且透過正確的磁碟區策略,可以在映像更新後保持持續的學習狀態。
兩種 Docker 模式說明 - 開始之前選擇
大多數指南完全跳過此決定並跳到 docker run。不。這兩種模式具有明顯不同的安全性和操作設定檔。
| Mode 1:容器內的愛馬仕 | Mode 2:Docker 作為終端沙箱 | |
|---|---|---|
| 什麼在哪裡運行 | Hermes + its runtime live inside the container | Hermes運行在主機上; Docker 為終端任務建立一次性沙箱容器 |
| Isolation | Hermes itself 隔離 | Only the output of terminal tasks 隔離 |
| State management | Volumes handle everything | Host filesystem holds Hermes state |
| Recommended 用於 | VPS production, team deployments | Local dev, quick experimentation |
| DOCKER_HOST needed | No | Yes (sibling container setup) |
Rule of thumb: 如果您要部署到 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 Engine 24+ 或者 Docker Desktop 4.26+
- 準備 LLM API 金鑰:OpenAI (
OPENAI_API_KEY)、Anthropic (Anthropic_API_KEY) 或本地 Ollama 端點 - 連接埠 443 上的出站網際網路存取(用於 LLM API 呼叫)
- 至少 2 GB RAM 分配給容器(對於 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 套接字。對於 Mode 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 | Config, session history | Yes |
| /root/.hermes/技能 | Learned skill library | Critical |
| /root/.hermes/內存 | Long-term memory store | Yes |
更新影像時:
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
No 書面指南目前涵蓋了這一點 - 它僅以視訊形式顯示。這是完整的設定。
第 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 Always Free Tier 是 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 故障
您最有可能遇到的故障的參考表:
| 失敗 | 症狀 | 診斷 | 使固定 |
|---|---|---|---|
| Image pull error | manifest unknown |
docker pull nousresearch/hermes-agent:latest 失敗 |
Check Docker Hub 為目前有效標籤;試試 --platform linux/amd64 |
| Volume permission denied | 容器因 /root/.hermes 上的權限錯誤而退出 |
docker run --rm -v hermes_home:/data busybox ls -la /data |
docker volume rm hermes_home 並重新創建,或透過 busybox init 容器使用 chown 進行修復 |
| LLM auth failure | 日誌中的 401 Unauthorized |
docker logs hermes-agent | grep -i auth |
Verify API key 在 .env 中設定正確;檢查前導/尾隨空格 |
| 設定精靈掛起 | Wizard prompts but accepts no input | 不適用 | 確保在 docker run 上設定 -it 標誌;撰寫需求 stdin_open: true + tty: true |
| LLM unreachable | Connection refused 到 Ollama 或本地端點 |
docker exec hermes-agent curl http://host.docker.internal:11434 |
使用host.docker.internal取代localhost;如果需要,新增 --add-host |
| Skills not persisting | Skill library empty after rebuild | docker volume ls — 檢查磁碟區是否存在 |
確保 hermes_skills 磁碟區已命名(不是綁定安裝)並組成檔案引用它 |
| ARM exec 格式錯誤 | exec /usr/local/bin/hermes: exec format error |
docker inspect image | grep Architecture |
使用 --platform linux/arm64 重新拉取 |
| Socket permission denied | permission denied /var/run/docker.sock |
主機上的 ls -la /var/run/docker.sock |
透過compose中的group_add將容器使用者加入到docker群組 |
常見問題
Q:我的 Hermes 技能能否在 docker compose pull && up -d 後繼續存在?
答:Yes — 只要您的技能儲存在命名磁碟區(不是綁定安裝或匿名磁碟區)中。本指南中的 compose 設定使用 hermes_skills 作為命名卷,Docker 在映像更新時會自動保留該磁碟區。
Q:我可以在同一台主機上執行多個 Hermes 實例嗎?
答:是的。為每個實例提供一個不同的 container_name 和單獨的命名磁碟區。您還需要確保它們不會在任何公開的連接埠上發生衝突。每個實例都會累積自己獨立的技能庫。
Q:Hermes Agent 是否支援透過 Docker 內的 Ollama 本地 LLM?
答:是的。在同一個組合堆疊中將 Ollama 作為單獨的服務運行,並將 Hermes 指向 http://Ollama:11434 (使用 Docker 的內部 DNS)。避免從容器內部指向 localhost — 對於主機端 Ollama 使用服務名稱或 host.docker.internal。
Q:將 Docker 套接字掛載到 Hermes 容器中安全嗎?
答:套接字安裝授予容器對主機的近 root 權限。在您控制所有工作負載的單一用戶 VPS 上這是可以接受的。在共用或多租用戶環境中,使用套接字代理程式(例如 Tecnativa/docker-socket-proxy)僅將 Hermes 所需的 API 呼叫列入白名單。
Q:生產 Hermes 部署的最低伺服器規格是多少?
答:對於遠端 LLM 提供者 (OpenAI/Anthropic),1 個 vCPU 和 2 GB RAM 是可行的。對於自架 Ollama 後端,您需要至少 8 GB RAM 和相當現代的 CPU。 Oracle 的 Ampere A1 免費方案(4 核心、24 GB)以零成本輕鬆涵蓋這兩個場景。
Q:如何備份赫爾墨斯學到的技能和記憶?
答:使用 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) - ☐ 設定資源限制以防止記憶體耗盡
- ☐ 設定精靈已完成並驗證了第一個聊天會話
- ☐ (如果 Mode 2)確認 Docker 套接字安裝並考慮套接字代理
立即獲得價值的後續步驟:
- 執行一些實際任務 - 文件摘要、程式碼審查、網路研究 - 為技能庫播種
- 完成 10-15 個任務後,執行
hermes skills list查看學到了什麼 - 請查看 Nous Research GitHub 以取得涵蓋自訂技能範本和記憶體調整的代理程式配置文檔
- 如果您使用 Oracle 免費套餐,請設定基於 cron 的
docker compose pull && docker compose up -d來實現零停機影像更新,同時保留學習狀態