🤖HermesBlog
Hermes Feature Guides · Часть 168/9/2026

Docker + Hermes Agent: два способа игры

Event Hooks — Auto-Trigger at Key Moments — easy-to-understand guide based on official docs (updated 2026-08-09)

hermes-feature-16-hooks

Docker + Hermes Agent: два способа игры

Если вы когда-нибудь задумывались, как Docker вписывается в картину Hermes Agent, вы попали по адресу. На самом деле есть два разных способа, как эти два инструмента могут работать вместе, и стоит знать разницу, прежде чем начинать печатать docker run.

Два режима Docker

  1. Запуск Hermes В Docker — сам агент живёт внутри контейнера. Это основная тема данного руководства.
  2. Docker как терминальный бэкенд — Hermes работает на вашей хост-машине, но каждая команда, которую он выполняет, происходит внутри единой постоянной Docker-песочницы. Эта песочница переживает вызовы инструментов, /new и даже субагентов, пока жив процесс Hermes.

Эта статья охватывает вариант 1. Ключевой момент: все ваши данные (конфиг, API-ключи, сессии, навыки, воспоминания) хранятся в одной директории на хосте, смонтированной в /opt/data внутри контейнера. Сам образ не хранит состояние, так что вы можете в любой момент подтянуть новую версию, не теряя настройки.


Быстрый старт: первичная настройка

Если это ваш первый опыт, создайте директорию для данных и запустите контейнер в интерактивном режиме, чтобы пройти мастер настройки:

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

Это запустит мастер, который запросит ваши API-ключи и запишет их в ~/.hermes/.env. Это нужно сделать всего один раз. Заодно — отличный момент настроить чат-систему (Telegram, Discord и т.д.), чтобы вашему шлюзу было где общаться.

⚠️ Важное предупреждение: избегайте браузерных VPS-консолей для этих команд установки. Некоторые провайдеры (например, Hetzner) искажают спецсимволы — : может прийти как ;, @ отображается неправильно, а вставленные API-ключи могут молча повредиться. Всегда подключайтесь по SSH для безопасного копирования и вставки команд. Если вы вынуждены использовать браузерную консоль, вводите команды вручную и перепроверяйте каждый :, @, = и /.

Совет от профи: внутри контейнера один раз выполните hermes setup --portal — refresh-токен сохранится в вашем смонтированном томе ~/.hermes.


Запуск в режиме шлюза

После настройки запустите контейнер в фоне как постоянный шлюз:

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

Порт 8642 открывает OpenAI-совместимый API-сервер шлюза и endpoint для проверки здоровья. Он необязателен, если вы используете только чат-платформы, но обязателен, если вы хотите, чтобы дашборд или внешние инструменты могли обращаться к шлюзу.

Что нового: супервизируемый шлюз

Вот важное изменение: внутри официального Docker-образа gateway run теперь автоматически супервизируется через s6-overlay. Если шлюз упадёт, он перезапустится в течение секунд, не теряя контейнер. Дашборд (когда включён) супервизируется вместе с ним.

В docker logs вы увидите однострочный маркер, подтверждающий обновление. Чтобы отказаться от этого и получить старое поведение (выход контейнера = выход шлюза), передайте --no-supervise или установите HERMES_GATEWAY_NO_SUPERVISE=1. Это полезно для CI-смоук-тестов; для продакшена супервизируемый режим по умолчанию строго лучше.

Жёсткие остановки цикла инструментов

Одна важная настройка для автономных шлюзов: tool_loop_guardrails.hard_stop_enabled по умолчанию имеет значение false. Это нормально для интерактивных сессий, где человек видит предупреждения. Но в автономных развёртываниях одних предупреждений может не хватить, чтобы остановить агента, застрявшего в цикле. Если вы хотите поведение автоматического выключателя, включите его в config.yaml вашего профиля:

tool_loop_guardrails:
  hard_stop_enabled: true
  hard_stop_after:
    exact_failure: 5
    idempotent_no_progress: 5

Открытие API-сервера

API-сервер включается через API_SERVER_ENABLED=true. Чтобы открыть его за пределы 127.0.0.1 внутри контейнера, также установите API_SERVER_HOST=0.0.0.0 и API_SERVER_KEY (минимум 8 символов — сгенерируйте с помощью openssl rand -hex 32):

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  -e API_SERVER_ENABLED=true \
  -e API_SERVER_HOST=0.0.0.0 \
  -e API_SERVER_KEY="$(openssl rand -hex 32)" \
  -e API_SERVER_CORS_ORIGINS='*' \
  nousresearch/hermes-agent gateway run

Замечание по безопасности: открытие любого порта на машине, доступной из интернета, — это риск. Не делайте этого, если вы полностью не понимаете последствия.


Запуск дашборда

Встроенный веб-дашборд работает как супервизируемый s6-rc сервис вместе со шлюзом в том же контейнере. Просто установите HERMES_DASHBOARD=1:

docker run -d \
  --name hermes \
  --restart unless-stopped \
  -v ~/.hermes:/opt/data \
  -p 8642:8642 \
  -p 9119:9119 \
  -e HERMES_DASHBOARD=1 \
  nousresearch/hermes-agent gateway run

Если дашборд упадёт, s6-supervise автоматически перезапустит его после короткой паузы. Его вывод попадает в docker logs <container>.


Куда уходят логи

Полную карту маршрутизации (шлюзы по профилям, дашборд, boot-реконсилятор и обще-контейнерные docker logs) смотрите в соответствующем разделе документации. Короткая версия: всё в итоге попадает в docker logs, но с чёткими префиксами, чтобы вы могли понять, что есть что.


Подводим итоги

Docker даёт вам чистый и легко обновляемый способ запуска Hermes Agent. Контейнер не хранит состояние, ваши данные безопасно лежат на хосте, а новое s6-супервизирование означает, что ваш шлюз останется в строю, даже если упадёт. Запускаете ли вы простую настройку или полный комбо-комплект с дашбордом и API-сервером — команды выше помогут вам сделать это за считанные минуты.

📖 Официальная документация

Эта статья основана на официальной документации Hermes Agent :Официальные документы › user-guide/features/hooks