Table of Contents
- What is Hermes Docker Compose?
- Why do people search hermes docker compose?
- How do you set up Hermes Docker Compose?
- 1. One-time setup (create ~/.hermes)
- 2. Minimal Compose (gateway + optional dashboard)
- 3. Auth before you expose :9119
- 4. Upgrade without losing state
- Hermes Docker Compose vs managed isolation: which should you choose?
- What mistakes show up first on Hermes Docker Compose?
- How much does Hermes Docker Compose cost?
- When should you skip Hermes Docker Compose?
- Frequently Asked Questions
- What is the official Hermes Docker Compose image?
- Do I need ports 8642 and 9119?
- Can I use Docker Compose with Hermes Desktop?
- How do I update Hermes on Docker Compose?
- Is Hermes Docker Compose free?
- When is Agent 37 better than Hermes Docker Compose?
Do not index

Hermes Docker Compose is the cleanest DIY way to run Hermes agent as an always-on gateway. Use the official
nousresearch/hermes-agent image, mount host ~/.hermes to /opt/data, run gateway run with restart: unless-stopped, and optionally enable the dashboard on port 9119 with HERMES_DASHBOARD=1. You own Compose, image pins, TLS, and upgrades. For always-on Hermes without YAML babysitting, Agent 37 starts at $3.99/mo (1 vCPU, 4 GB RAM, 8 GB storage).What is Hermes Docker Compose?
Hermes Docker Compose means declaring the Hermes agent runtime in a
docker-compose.yml (or .yaml), then starting it with docker compose up -d on a Linux host or Docker Desktop. The container is disposable. Your agent brain lives on the host volume.Piece | What it does |
Image | nousresearch/hermes-agent:latest (or a pinned tag) |
Command | gateway run (s6-supervised in the published image) |
Volume | ~/.hermes → /opt/data (config, keys, sessions, memory, skills) |
Port 8642 | OpenAI-compatible API / health (optional for chat-only channels) |
Port 9119 | Dashboard when HERMES_DASHBOARD=1 |
Official guide: Hermes Docker Setup. Desktop-shaped Remote Gateway path: Hermes Desktop Docker.
Do not confuse this with "Docker as a terminal backend," where Hermes runs on the host and only tool commands land in a sandbox container. This page is Hermes in Docker via Compose.
Why do people search hermes docker compose?
People search hermes docker compose when they want one YAML file, one-command updates (
docker compose pull then up -d), and a rollback story that is just a previous image tag. Local hermes setup is fine for a laptop chat. Compose is the boring production shape for a VPS.Common triggers:
- Official docs showed a Compose example and they want the full path
- They already run OpenClaw or other agents with Compose and want Hermes the same way
- Channels die when the laptop sleeps
- They need dashboard 9119 next to gateway 8642 without memorizing long
docker runlines
If you only need Hermes online with isolation and a browser console, skip Compose. Managed path: deploy Hermes.
How do you set up Hermes Docker Compose?

You set up Hermes Docker Compose in four moves: one-time wizard, write Compose, start detached, then lock down the dashboard.
1. One-time setup (create ~/.hermes)
Use SSH, not a broken browser VPS console that mangles
: and @ on paste.mkdir -p ~/.hermes
docker run -it --rm \
-v ~/.hermes:/opt/data \
nousresearch/hermes-agent setupKeys and channel tokens land in
~/.hermes/.env. Run this once per data directory.2. Minimal Compose (gateway + optional dashboard)
Official docs publish a Compose shape like this:
services:
hermes:
image: nousresearch/hermes-agent:latest
container_name: hermes
restart: unless-stopped
command: gateway run
ports:
- "8642:8642" # gateway API
- "9119:9119" # dashboard (only when HERMES_DASHBOARD=1)
volumes:
- ~/.hermes:/opt/data
environment:
- HERMES_DASHBOARD=1
deploy:
resources:
limits:
memory: 4G
cpus: "2.0"Start:
docker compose up -d
docker compose logs -fMount stays
~/.hermes:/opt/data. Do not mount over /opt/hermes (immutable app tree). Never point two gateway containers at the same data directory.3. Auth before you expose :9119
In the published image, dashboard host often defaults to
0.0.0.0 so published ports work. Non-loopback binds require an auth provider. HERMES_DASHBOARD_INSECURE is a deprecated no-op after the June 2026 hardening.Homelab / Tailscale shape: set
HERMES_DASHBOARD_BASIC_AUTH_USERNAME + HERMES_DASHBOARD_BASIC_AUTH_PASSWORD (and a secret for stable sessions). Prefer Tailscale or an SSH tunnel over a naked public bind. OAuth / OIDC options are documented for public-facing deploys. Dashboard deep dive: Hermes agent dashboard.4. Upgrade without losing state
docker compose pull
docker compose up -dState survives because
/opt/data is on the host. Pin a digest or release tag in production instead of floating forever on :latest.Hermes Docker Compose vs managed isolation: which should you choose?

Choose Compose when you already run Docker in production and will own patches. Choose managed when channels equal revenue and you do not want a YAML retainer.
Path | Price | Specs | Management |
DIY Hermes Docker Compose | About $6 to $12/mo VPS | Comfortable 2 vCPU / 4 GB / 40 GB | You |
Hermes Desktop + Docker backend | Same VPS + laptop | Gateway in Docker, UI on Desktop | You |
Agent 37 Basic | $3.99/mo | 1 vCPU, 4 GB RAM, 8 GB | Managed isolation |
Agent 37 Pro | $29.99/mo | 2 vCPU, 8 GB RAM, 20 GB, Chromium | Managed + browser |
At $50/hour, one Compose incident exceeds a year of Basic ($47.88). Related: Hermes agent hosting.
What mistakes show up first on Hermes Docker Compose?
The first mistakes are wrong volume mounts, public dashboards without auth, and two containers fighting one
~/.hermes.Operational tells:
- Mounting the wrong path and wondering why memory vanished after recreate
- Publishing 9119 to the internet with no auth provider
- Running a second gateway against the same data directory
- Treating
:latestas a production pin with no rollback tag
- Expecting laptop Docker Desktop to stay online with the lid closed
Tool-loop hard stops default off. For unattended gateways, enable them in
config.yaml so a stuck loop cannot burn tokens forever. Official docs cover tool_loop_guardrails.hard_stop_enabled.How much does Hermes Docker Compose cost?

Software is free. The bill is VPS (or power), model tokens (BYOK), and your time.
Tier | Price | Specs | Typical use |
DIY Compose on VPS | About $6 to $12/mo | 2 vCPU / 4 GB class | Engineers who own Docker |
Agent 37 Basic | $3.99/mo | 1 vCPU, 4 GB, 8 GB | Lean always-on Hermes |
Plus | $9.99/mo | 1 vCPU, 4 GB, 12 GB | Bundled free models |
Pro | $29.99/mo | 2 vCPU, 8 GB, 20 GB, Chromium | Browser workloads |
Max | $99.99/mo | 4 vCPU, 16 GB, 40 GB | Teams |
Flat monthly dashboard instance on Agent 37. BYOK. White-label API from $1.99 per agent per month, billed per minute. Start at Agent 37 pricing.
When should you skip Hermes Docker Compose?
Skip DIY Compose when you need per-client isolation for agencies, predictable uptime without SSH, or you will not staff Docker upgrades. That is the managed path.
Stay on Compose when you need custom networking, sidecars, or you already have Prometheus, Traefik, and a patch cadence. Sister Desktop path: Hermes Desktop Docker. Fast managed deploy: deploy Hermes.
Frequently Asked Questions
What is the official Hermes Docker Compose image?
nousresearch/hermes-agent (often tagged :latest). Mount ~/.hermes to /opt/data and run gateway run.Do I need ports 8642 and 9119?
8642 is the API / health surface. Chat-only Telegram or Discord gateways often do not need it published. 9119 is the dashboard when
HERMES_DASHBOARD=1. Do not confuse them with Desktop Remote Gateway wiring.Can I use Docker Compose with Hermes Desktop?
Yes. Run Hermes in Compose with dashboard enabled, then point Desktop at a Remote Gateway on 9119. Full path: Hermes Desktop Docker.
How do I update Hermes on Docker Compose?
docker compose pull then docker compose up -d. Keep /opt/data mounted so state survives.Is Hermes Docker Compose free?
The software is free. The VPS and tokens are not. Managed Hermes on Agent 37 starts at $3.99/mo.
When is Agent 37 better than Hermes Docker Compose?
When isolation, patches, and a browser console matter more than editing YAML. Basic at $3.99/mo is the usual switch.