Docker

Docker — платформа контейнеризации для запуска Hermes Agent в изолированном окружении. Образ содержит все зависимости (Python, Node.js, Playwright), а данные агента хранятся на смонтированном томе и сохраняются при обновлении контейнера.

Зачем Docker

  • Изоляция — зависимости не конфликтуют с хостовой системой
  • Быстрое обновлениеdocker pull без потери конфигурации
  • Переносимость — работает на Linux, macOS, Windows
  • Управление ресурсами — ограничение памяти и CPU

Запуск Hermes в контейнере

Создайте директорию данных и запустите мастер настройки:

mkdir -p ~/.hermes
docker run -it --rm   -v ~/.hermes:/opt/data   nousresearch/hermes-agent setup

Для работы в режиме шлюза (Telegram, Discord, Slack):

docker run -d   --name hermes   --restart unless-stopped   -v ~/.hermes:/opt/data   -p 8642:8642   nousresearch/hermes-agent gateway run

Том /opt/data содержит конфигурацию, API-ключи, сессии, память и навыки. Данные на томе переживают пересоздание контейнера.

Terminal Backends

Hermes поддерживает несколько терминальных бэкендов — способов выполнения shell-команд агентом. Бэкенд выбирается через параметр terminal.backend в config.yaml или через hermes setup terminal.

local — локальный терминал

Бэкенд по умолчанию. Агент выполняет команды непосредственно на хостовой системе. Максимальная производительность, но нет изоляции — агент имеет полный доступ к файловой системе и сетью хоста.

terminal:
  backend: local
  cwd: /root/.hermes/workspace
  timeout: 180

docker — изолированный контейнер

Агент работает на хосте, но все shell-команды выполняются внутри долгоживущего Docker-контейнера-песочницы. Контейнер сохраняется между вызовами инструментов и подагентами, навыки автоматически монтируются как тома только для чтения. Рекомендуется для заданий, требующих изоляции от хостовой системы.

terminal:
  backend: docker
  docker:
    image: nousresearch/hermes-agent:latest
    volumes:
      - ~/.hermes:/opt/data
    shm_size: 1g
  cwd: /opt/data/workspace
  timeout: 180

Преимущества Docker-бэкенда:

  • Безопасность — файловая система хоста изолирована, монтируются только указанные тома
  • Воспроизводимость — одинаковое окружение независимо от хоста
  • Ограничение ресурсов — через --memory, --cpus
  • Сетевая изоляция — контейнер может работать в отдельной Docker-сети

ssh — удалённый сервер

Команды выполняются на удалённом сервере по SSH. Подходит для работы с мощными серверами или GPU-инстансами, когда локальные ресурсы ограничены.

terminal:
  backend: ssh
  ssh:
    host: gpu-server.example.com
    user: deploy
    key: ~/.ssh/id_ed25519
  cwd: /home/deploy/workspace
  timeout: 180

Бэкенд использует Modal для запуска команд в серверлесс-контейнерах. Автоматическое масштабирование, оплата по использованию. Подходит для ресурсоёмких задач (ML-тренировки, бенчмарки).

terminal:
  backend: modal
  modal:
    image: nousresearch/hermes-agent:latest
    gpu: A100
  timeout: 300

Конфигурация терминала

Параметры секции terminal в config.yaml:

Параметр Тип По умолчанию Описание
terminal.backend string local Бэкенд: local, docker, ssh, modal
terminal.cwd string workspace профиля Рабочая директория по умолчанию
terminal.timeout int 180 Таймаут выполнения команды (секунды)

Настройка через CLI:

hermes setup terminal          # интерактивный мастер
hermes config set terminal.backend docker
hermes config set terminal.cwd /opt/data/workspace
hermes config set terminal.timeout 300

Docker Compose

services:
  hermes:
    image: nousresearch/hermes-agent:latest
    restart: unless-stopped
    command: gateway run
    ports:
      - "8642:8642"
    volumes:
      - ~/.hermes:/opt/data
    environment:
      - HERMES_DASHBOARD=1

Подключение к локальным моделям

Для vLLM или Ollama используйте одну Docker-сети и имя контейнера как хост:

model:
  provider: custom
  model: my-model
  base_url: http://vllm:8000/v1
  api_key: "none"

Устранение неполадок

  • Контейнер сразу завершается — проверьте docker logs hermes
  • Ошибки доступаchmod -R 755 ~/.hermes
  • Браузер не работает — добавьте --shm-size=1g
  • Docker-бэкенд не видит файлы — проверьте монтирование томов в конфигурации
  • SSH-бэкенд таймаутит — увеличьте terminal.timeout или проверьте SSH-ключ