Существует два различных способа взаимодействия Docker с агентом Hermes:
Запуск Hermes в Docker — сам агент запускается внутри контейнера (основная тема этой страницы).
Docker как серверная часть терминала — агент запускается на вашем хосте, но выполняет каждую команду внутри одного постоянного контейнера песочницы Docker, который сохраняется при вызовах инструментов, /new и субагентах на протяжении всего процесса Hermes (см. Конфигурация → Docker Backend)
На этой странице описан вариант 1. Контейнер хранит все пользовательские данные (конфигурацию, ключи API, сеансы, навыки, воспоминания) в одном каталоге, смонтированном с хоста в /opt/data. Сам образ не имеет состояния и может быть обновлен путем получения новой версии без потери конфигурации.
Быстрый старт
Если вы впервые запускаете агент Hermes, создайте каталог данных на хосте и запустите контейнер в интерактивном режиме, чтобы запустить мастер установки:
Вы попадете в мастер установки, который запросит у вас ключи API и запишет их в ~/.hermes/.env. Вам нужно сделать это только один раз. На этом этапе настоятельно рекомендуется настроить систему чата для работы шлюза.
Работа в режиме шлюза
После настройки запустите контейнер в фоновом режиме в качестве постоянного шлюза (Telegram, Discord, Slack, WhatsApp и т. д.):
Порт 8642 предоставляет доступ к OpenAI-совместимому API-серверу и конечной точке работоспособности шлюза. Это необязательно, если вы используете только платформы чата (Telegram, Discord и т. д.), но необходимо, если вы хотите, чтобы панель управления или внешние инструменты подключались к шлюзу.
Открытие любого порта на компьютере с выходом в Интернет представляет собой угрозу безопасности. Не следует этого делать, если вы не понимаете риски.
Запуск панели мониторинга
Встроенная веб-панель мониторинга работает как дополнительный побочный процесс внутри того же контейнера, что и шлюз. Установите HERMES_DASHBOARD=1 и откройте порт 9119 рядом с портом 8642 шлюза:
Точка входа запускает hermes Dashboard в фоновом режиме (работает от имени пользователя hermes без полномочий root) перед выполнением основной команды. Вывод информационной панели имеет префикс «[dashboard]» в журналах Docker, поэтому его легко отделить от журналов шлюза.
Переменная среды
Описание
По умолчанию
HERMES_DASHBOARD
Установите значение 1 (или true/yes), чтобы запускать панель мониторинга вместе с основной командой
(не установлено — панель не запущена)
HERMES_DASHBOARD_HOST
Привязка адреса для HTTP-сервера панели мониторинга
0.0.0.0
HERMES_DASHBOARD_PORT
Порт для HTTP-сервера приборной панели
9119
HERMES_DASHBOARD_TUI
Установите значение «1», чтобы открыть вкладку «Чат» в браузере (встроенная «hermes --tui» через PTY/WebSocket)
(не установлено)
Значение по умолчанию HERMES_DASHBOARD_HOST=0.0.0.0 требуется, чтобы хост мог получить доступ к информационной панели через опубликованный порт; В этом случае точка входа автоматически передает --insecure на hermes Dashboard. Переопределите значение «127.0.0.1», если вы хотите ограничить доступ к панели мониторинга только внутри контейнера (например, за обратным прокси-сервером в боковой панели).:::примечание
Побочный процесс информационной панели не контролируется — в случае сбоя он остается неактивным до перезапуска контейнера. Запуск его как отдельного контейнера не поддерживается: для обнаружения активности шлюза панели мониторинга требуется общее пространство имен PID с процессом шлюза.
Запуск в интерактивном режиме (чат CLI)
Чтобы открыть сеанс интерактивного чата с работающим каталогом данных:
Или, если вы уже открыли терминал в работающем контейнере (например, через Docker Desktop), просто запустите:
/opt/hermes/.venv/bin/hermes
Постоянные тома
Том /opt/data является единственным источником правды для всего состояния Гермеса. Он отображается в каталог ~/.hermes/ вашего хоста и содержит:
Путь
Содержание
.env
Ключи и секреты API
config.yaml
Все конфигурации Гермеса
ДУША.md
Личность/личность агента
сессии/
История разговора
воспоминания/
Постоянное хранилище памяти
навыки/
Установленные навыки
крон/
Определения плановых должностей
крючки/
Крючки событий
журналы/
Журналы выполнения
скины/
Пользовательские скины CLI
Никогда не запускайте два контейнера шлюза Hermes в одном и том же каталоге данных одновременно — файлы сеансов и хранилища памяти не предназначены для одновременного доступа к записи.
## Поддержка нескольких профилей
Hermes поддерживает несколько профилей — отдельные каталоги ~/.hermes/, которые позволяют запускать независимые агенты (разные ДУШИ, навыки, память, сеансы, учетные данные) из одной установки. При работе в Docker не рекомендуется использовать встроенную многопрофильную функцию Hermes.
Вместо этого рекомендуемый шаблон — один контейнер на профиль, при этом каждый контейнер привязывает свой собственный каталог хоста как /opt/data:
# Work profile
dockerrun-d\--namehermes-work\--restartunless-stopped\-v~/.hermes-work:/opt/data\-p8642:8642\nousresearch/hermes-agentgatewayrun
# Personal profile
dockerrun-d\--namehermes-personal\--restartunless-stopped\-v~/.hermes-personal:/opt/data\-p8643:8642\nousresearch/hermes-agentgatewayrun
Зачем разделять контейнеры по профилям в Docker:
Изоляция — каждый контейнер имеет собственную файловую систему, таблицу процессов и ограничения на ресурсы. Сбой, изменение зависимостей или неконтролируемый сеанс в одном профиле не могут повлиять на другой.
Независимый жизненный цикл — обновление, перезапуск, приостановка или откат каждого агента отдельно («docker restart hermes-work» оставляет «hermes-personal» нетронутым).
Чистое разделение портов и сетей — каждый шлюз привязывает собственный хост-порт; нет риска перекрестных помех между чат-платформами или серверами API.
Упрощенная мысленная модель — контейнер является профилем. Резервные копии, миграции и разрешения следуют за каталогом, смонтированным привязкой, без необходимости запоминать дополнительные флаги --profile.
Предотвращает риск одновременной записи — приведенное выше предупреждение о том, что никогда не следует использовать два шлюза для одного и того же каталога данных, по-прежнему применимо к профилям в одном контейнере.
В Docker Compose это просто означает объявление одной службы для каждого профиля с разными container_name, volumes и ports:
Прямые флаги -e переопределяют значения из .env. Это полезно для интеграции CI/CD или менеджера секретов, когда вам не нужны ключи на диске.
Пример Docker Compose
Для постоянного развертывания как со шлюзом, так и с информационной панелью удобно использовать docker-compose.yaml:
services:hermes:image:nousresearch/hermes-agent:latestcontainer_name:hermesrestart:unless-stoppedcommand:gateway runports:-"8642:8642"# gateway API-"9119:9119"# dashboard (only reached when HERMES_DASHBOARD=1)volumes:-~/.hermes:/opt/dataenvironment:-HERMES_DASHBOARD=1# Uncomment to forward specific env vars instead of using.env file:# - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}# - OPENAI_API_KEY=${OPENAI_API_KEY}# - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}deploy:resources:limits:memory:4Gcpus:"2.0"
Начните с docker compose up -d и просмотрите журналы с docker Compose logs -f. Вывод информационной панели имеет префикс «[dashboard]», поэтому его легко фильтровать из журналов шлюза.
Автоматизация браузера (Playwright/Chromium) — функция, требующая больше всего памяти. Если вам не нужны инструменты браузера, достаточно 1 ГБ. При активных инструментах браузера выделите не менее 2 ГБ.
Официальный образ основан на Debian:13.4 и включает в себя:
Python 3 со всеми зависимостями Hermes (uv pip install -e ".[all]")
— Node.js + npm (для автоматизации браузера и моста WhatsApp)
Драматург с Chromium (npx драматург установить --with-deps chromium --only-shell)
— ripgrep, ffmpeg, git и tini в качестве системных утилит.
docker-cli — чтобы агенты, работающие внутри контейнера, могли управлять демоном Docker хоста (привязать-монтировать /var/run/docker.sock, чтобы включить его) для docker build, docker run, проверки контейнера и т. д.
openssh-client — включает серверную часть терминала SSH изнутри контейнера. Серверная часть SSH обращается к системному двоичному файлу ssh; без этого он молча терпел неудачу в контейнерных установках.
Мост WhatsApp (scripts/whatsapp-bridge/)
Скрипт точки входа (docker/entrypoint.sh) загружает том данных при первом запуске:
- Создает структуру каталогов («сессии/», «воспоминания/», «навыки/» и т. д.)
- Копирует .env.example → .env, если .env не существует.
- Копирует файл config.yaml по умолчанию, если он отсутствует.
- Копирует файл SOUL.md по умолчанию, если он отсутствует.
- Синхронизирует связанные навыки с использованием подхода на основе манифеста (сохраняет пользовательские изменения)
- При необходимости запускает hermes Dashboard в качестве фонового побочного процесса, если HERMES_DASHBOARD=1 (см. Запуск приборной панели)
- Затем запускается hermes с любыми аргументами, которые вы передаете.
Обновление
Извлеките последний образ и воссоздайте контейнер. Ваш каталог данных нетронут.
При использовании Docker в качестве среды выполнения (не описанных выше методов, а когда агент запускает команды внутри песочницы Docker — см. Конфигурация → Docker Backend), Hermes повторно использует один долгоживущий контейнер для всех вызовов инструментов и автоматически привязывает каталог навыков (~/.hermes/skills/) и все файлы учетных данных, объявленные навыками, в этот контейнер как тома, доступные только для чтения. Сценарии навыков, шаблоны и ссылки доступны внутри песочницы без ручной настройки, а поскольку контейнер сохраняется в течение всего срока действия процесса Hermes, любые устанавливаемые вами зависимости или записываемые вами файлы остаются до следующего вызова инструмента.
Такая же синхронизация происходит для SSH и модальных бэкэндов — файлы навыков и учетных данных загружаются через rsync или API модального монтирования перед каждой командой.
Устранение неполадок
Контейнер немедленно завершает работу
Проверьте журналы: docker logs Hermes. Распространенные причины:
- Отсутствует или недействителен файл .env — сначала запустите в интерактивном режиме, чтобы завершить настройку.
- Конфликты портов при работе с открытыми портами.
Ошибки «Отказано в разрешении»
Точка входа в контейнер передает привилегии пользователю Hermes без полномочий root (UID 10000) через gosu. Если ваш хост ~/.hermes/ принадлежит другому UID, установите HERMES_UID/HERMES_GID в соответствии с пользователем вашего хоста или убедитесь, что каталог данных доступен для записи:
chmod-R755~/.hermes
Инструменты браузера не работают
Драматургу нужна общая память. Добавьте --shm-size=1g в команду запуска Docker: