十分钟用 Docker Compose 跑起 Hermes Agent:一次配置长期省心的容器化部署
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
Hermes Agent 是一个能调用工具、驱动真实终端和浏览器的 AI 代理,支持交互式 CLI、消息集成和定时任务。如果你的日常是"装到一半报缺依赖、换台机器全部重来",那用 Docker Compose 做容器化部署就是最省事的路:配置写一次,之后在哪台机器上都docker compose up -d一条命令拉起。
部署前 30 秒 ⏱️
开工前把这两样确认到位,缺一个后面都会卡住:
- Docker Engine 20.10.0 及以上
- Docker Compose v2.0 及以上
一条命令自检:
docker --version && docker compose version两个版本号都正常打出来就可以往下走。
最小可用的 docker-compose.yml 写法
Hermes Agent 支持多种终端后端(local、docker、ssh、singularity、modal 等),其中 Docker 后端是兼容性最好的选择。它的工作方式由~/.hermes/config.yaml里的terminal段决定,最小配置如下:
terminal: backend: "docker" # 所有命令改在容器里执行 docker_image: "python:3.11" cwd: "/app"意思是:Agent 要跑任何命令时,都丢进一个 Python 3.11 容器执行,工作目录定在/app。危险命令被关在隔离环境里,宿主机不受影响——这正是选容器方案的核心理由。
为了让 Agent 本身也跑在容器里,项目里没有现成的 compose 文件,你按下面的最小配置自建一个即可,每行都有存在的理由:
services: hermes-agent: image: python:3.11 volumes: - ~/.hermes:/root/.hermes # 配置、记忆、会话状态全部落在这,容器删了也不丢 - ./:/app # 把工作目录映射成项目源码,和上面 terminal.cwd 对齐 working_dir: /app environment: - TERMINAL_ENV=docker - HERMES_MAX_ITERATIONS=60 command: ["sh", "-c", "pip install -r requirements.txt && python run_agent.py"] restart: unless-stoppedvolumes里挂载~/.hermes是关键:Agent 的记忆、技能和会话都存这里,不挂载等于每次重启失忆working_dir与config.yaml的terminal.cwd保持一致,Agent 对文件路径的引用才不会错乱restart: unless-stopped让你重启服务器后服务自动回来
日常操作速查 🧰
全部命令集中在这一节,用熟了基本不用翻文档:
git clone https://gitcode.com/GitHub_Trending/he/hermes-agent cd hermes-agent && docker compose up -d # 首次克隆并后台启动 docker compose logs -f hermes-agent # 实时跟踪日志,排障第一站 docker compose down # 停止并移除容器 git pull && docker compose up -d --build # 升级:拉新代码后重建 docker compose exec hermes-agent bash # 进容器内手动执行命令补充一点:docker exec进去后看到的文件系统就是 Agent 真正操作的那个环境,修路径、查权限都在这里做,比猜要快得多。
生产环境加固 🛡️
自用跑通之后,上生产前建议做三件事:
限制资源,防止单容器吃满主机
services: hermes-agent: deploy: resources: limits: cpus: '2' memory: 4G reservations: cpus: '1' memory: 2G网络按需开口
默认容器只有出站能力。如果启用了 Web 界面需要被外部访问,再显式加映射和网络:
services: hermes-agent: ports: - "8000:8000" networks: - hermes-network networks: hermes-network: driver: bridge降低权限
只使用官方或可信来源的镜像;API 密钥走环境变量或密钥管理服务注入,不要写死在 yaml 里。如果你的宿主机用户不是 root,把运行用户映射成自己的身份,避免生成一堆 root 属主的文件:
services: hermes-agent: user: "${UID}:${GID}"启动前export UID=$(id -u); export GID=$(id -g)即可。
高频踩坑 💥
现象:容器里生成的文件权限错乱、Agent 读写报错原因:容器内默认以 root 写文件,属主和宿主机用户不一致。 解法:按上一节的user: "${UID}:${GID}"映射运行用户,并确认~/.hermes挂载路径写对了(错挂到别的路径等于没持久化)。
现象:想查个东西却找不到"在哪里跑命令"原因:很多人直接docker exec进一个交互式 shell,忘了容器里还有前台进程在跑。 解法:docker compose exec hermes-agent bash开的是独立会话,不影响主进程,查完exit即可;需要长期改动则改 compose 文件重建。
现象:容器删了重建后配置还在 / 配置全没了原因:状态是否保留只取决于~/.hermes有没有被挂载。 解法:核对 compose 文件里这一行- ~/.hermes:/root/.hermes。只要它存在,配置和会话状态就安全。
下一步可以做什么
当单机跑稳之后,最自然的扩展是在同一个 compose 文件里加一个数据库或缓存服务(比如 Postgres、Redis),让 Hermes Agent 的定时任务和记忆存储不再只依赖本地文件——加一个 service、多一条挂载,架构就从单机工具长成了一套小型微服务。
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考