Hermes Agent Docker Compose 容器化部署实战:从零启动到避坑的完整路径
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
Hermes Agent 是一个能操作真实终端、驱动浏览器、接入二十多个消息平台的个人 AI 智能体,官方支持 Docker Compose 这类容器化部署方式。如果你不想把环境折腾在自己的笔记本上,而是想放到一台 VPS 或 NAS 里长期跑,本文带你用 Docker Compose 完成最小可用部署,并把新手最常踩的权限、数据丢失两个坑提前排掉。
动手前先分清:两个"Docker"不是一回事
很多教程把两件事混着讲,我们先拆开。
- 容器化部署 Hermes 本身:整个 Agent 跑在容器里,宿主机保持干净,升级回滚都只是换个镜像——这就是本篇的主题。
- Docker 终端后端:Hermes 已经跑起来了,但它把需要执行的命令派发到另一个 Docker 容器里完成,相当于给"危险命令"套了一层沙箱。项目 README 里列了 7 种终端后端(local、Docker、SSH、Singularity、Modal、Daytona、Vercel Sandbox),在
~/.hermes/config.yaml的terminal段里切换即可。
两者互不冲突:你可以把 Hermes 部署进容器,再在容器内把终端后端也设为docker,做到"部署隔离 + 执行隔离"双重防护。
5 分钟起一份最小可用部署
仓库根目录就附带了一份完整的 Dockerfile,官方已经把依赖预装、非 root 用户、服务守护都处理好了,你不需要自己写镜像定义。克隆仓库后直接构建:
git clone https://gitcode.com/GitHub_Trending/he/hermes-agent cd hermes-agent docker build -t hermes-agent:local .配套的 Compose 文件只需要四样东西:
services: hermes: image: hermes-agent:local volumes: - hermes-data:/opt/data ports: - "8642:8642" restart: unless-stopped volumes: hermes-data:要点说明:/opt/data是官方镜像声明的数据目录(HERMES_HOME),配置、会话记录、凭据全落在这里,用命名卷而不是宿主机路径,这样docker compose down也不会丢数据;8642是 Web 面板的监听端口,桌面端远程连接同样走这个端口。
首次启动后的配置怎么改
容器第一次启动时会自动完成目录初始化和配置播种,之后所有配置都通过 CLI 交互完成,不用手动进容器改文件:
docker compose exec hermes hermes setup想限制资源占用的话,在 service 下追加deploy.resources.limits,比如cpus: "2"、memory: 4G,防止 Agent 跑高负载任务时占满宿主机。
权限报错这样修:两行搞定
⚠️ 这是新手反馈最多的问题:日志里出现权限拒绝,或宿主机挂载的目录容器读不进去。原因是官方镜像默认用一个 UID 为 10000 的hermes非 root 用户运行,和宿主机普通用户的 UID 对不上时就会写不进去。
在 Compose 的 service 里加一个环境变量:
environment: - HERMES_UID=$(id -u)启动脚本检测到HERMES_UID后会自动调整容器内用户与数据卷的所有权,不需要你手动去宿主机 chown。
日常运维:记住 3 条命令就够了
| 场景 | 命令 |
|---|---|
| 跟日志 | docker compose logs -f hermes |
| 进容器执行子命令 | docker compose exec hermes hermes ... |
| 升级 | git pull && docker compose up -d --build |
docker exec那条命令可以随便用:镜像内置了一个提权回落的 shim,root 执行时会自动降回hermes用户,不会在数据目录里留下 root 属主的文件。
上线前的 3 个安全细节
- 别裸奔面板端口:8642 只绑定内网或放在反向代理后面,面板虽有 token 机制,但公网暴露本身就没必要。
- 镜像来源自己把关:从仓库源码构建的镜像(也就是上面的流程)最可控,第三方改名再发布的镜像要谨慎。
- 慎挂 Docker socket:只有当你在容器内启用 Docker 终端后端时才需要挂载
/var/run/docker.sock——它相当于把宿主机的 root 能力交给了 Agent,非必要不开。
下一步建议:先按这份最小配置把面板跑起来,再阅读 AGENTS.md 里关于终端后端的说明,把terminal.backend切到docker,体验"容器里跑 Agent、命令在沙箱里执行"的完整链路。
【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考