2026-04-12 07:37:35 +00:00
|
|
|
# Two-container Docker Compose: Hermes Agent + Hermes WebUI
|
|
|
|
|
#
|
v0.50.260: Docker reliability batch - PR #1428 + broader UX/docs improvements + Opus advisor fixes
Combines PR #1428 (UID/GID alignment) with a broader Docker reliability pass
that addresses recurring user reports about compose files not working.
Constituent PR:
- #1428 sunnysktsang - Align agent UID/GID with webui (fixes #1399).
Two- and three-container compose files had agent at UID 10000 (image
default) and webui at UID 1000 (WANTED_UID default), causing permission
denied on shared hermes-home volume. All services now use ${UID:-1000}.
Plus broader Docker UX overhaul:
- All 3 compose files document HERMES_SKIP_CHMOD/HERMES_HOME_MODE escape
hatches inline (the v0.50.254 fix wasn't surfaced for Docker users).
- New .env.docker.example template covering UID/GID, paths, password,
permission handling. UID/GID are uncommented with placeholder values
per Opus advisor (so macOS users don't skim past).
- New docs/docker.md - comprehensive guide: 5-min quickstart, failure
mode table with one-line fixes, bind-mount migration, multi-container
architecture diagram, macOS Docker Desktop VirtioFS note, link to
community sunnysktsang/hermes-suite all-in-one image.
- README Docker section rewritten - clearer quickstart, failure-mode
table, link to docs/docker.md. Stale /root/.hermes references removed.
Plus Opus pre-release advisor MUST-FIX:
- HERMES_HOME_MODE has DIFFERENT semantics in the WebUI vs the agent
image. WebUI: credential-file mode threshold (0640 allows group bits).
Agent: HERMES_HOME directory mode (default 0700). 0640 on a directory
has no owner-execute bit, so the agent can't traverse its own home and
bricks. My initial draft recommended HERMES_HOME_MODE=0640 in agent
service blocks - corrected to 0750 across all 4 surfaces (compose
files, .env.docker.example, docs/docker.md). 3 regression tests pin
the asymmetry.
12 regression tests total in test_v050260_docker_invariants.py.
Full suite: 3627 passed, 0 failed.
Nathan explicitly authorized merge with my own review + Opus only, no
independent review needed.
2026-05-01 23:09:50 +00:00
|
|
|
# QUICK START:
|
2026-04-12 07:37:35 +00:00
|
|
|
# docker compose -f docker-compose.two-container.yml up -d
|
v0.50.260: Docker reliability batch - PR #1428 + broader UX/docs improvements + Opus advisor fixes
Combines PR #1428 (UID/GID alignment) with a broader Docker reliability pass
that addresses recurring user reports about compose files not working.
Constituent PR:
- #1428 sunnysktsang - Align agent UID/GID with webui (fixes #1399).
Two- and three-container compose files had agent at UID 10000 (image
default) and webui at UID 1000 (WANTED_UID default), causing permission
denied on shared hermes-home volume. All services now use ${UID:-1000}.
Plus broader Docker UX overhaul:
- All 3 compose files document HERMES_SKIP_CHMOD/HERMES_HOME_MODE escape
hatches inline (the v0.50.254 fix wasn't surfaced for Docker users).
- New .env.docker.example template covering UID/GID, paths, password,
permission handling. UID/GID are uncommented with placeholder values
per Opus advisor (so macOS users don't skim past).
- New docs/docker.md - comprehensive guide: 5-min quickstart, failure
mode table with one-line fixes, bind-mount migration, multi-container
architecture diagram, macOS Docker Desktop VirtioFS note, link to
community sunnysktsang/hermes-suite all-in-one image.
- README Docker section rewritten - clearer quickstart, failure-mode
table, link to docs/docker.md. Stale /root/.hermes references removed.
Plus Opus pre-release advisor MUST-FIX:
- HERMES_HOME_MODE has DIFFERENT semantics in the WebUI vs the agent
image. WebUI: credential-file mode threshold (0640 allows group bits).
Agent: HERMES_HOME directory mode (default 0700). 0640 on a directory
has no owner-execute bit, so the agent can't traverse its own home and
bricks. My initial draft recommended HERMES_HOME_MODE=0640 in agent
service blocks - corrected to 0750 across all 4 surfaces (compose
files, .env.docker.example, docs/docker.md). 3 regression tests pin
the asymmetry.
12 regression tests total in test_v050260_docker_invariants.py.
Full suite: 3627 passed, 0 failed.
Nathan explicitly authorized merge with my own review + Opus only, no
independent review needed.
2026-05-01 23:09:50 +00:00
|
|
|
# Open http://localhost:8787
|
|
|
|
|
#
|
|
|
|
|
# This runs the agent and web UI in separate containers connected via shared
|
|
|
|
|
# Docker volumes. The WebUI installs the agent's Python dependencies from the
|
|
|
|
|
# shared agent source volume at startup.
|
|
|
|
|
#
|
|
|
|
|
# WHEN TO USE THIS:
|
|
|
|
|
# - You want isolation between the agent gateway and the WebUI
|
|
|
|
|
# - You're already running hermes-agent in its own container
|
|
|
|
|
# - You don't need the dashboard (use docker-compose.three-container.yml for that)
|
|
|
|
|
#
|
|
|
|
|
# WHEN NOT TO USE THIS:
|
|
|
|
|
# - You hit "Permission denied" trying to share an existing ~/.hermes directory
|
|
|
|
|
# → use docker-compose.yml (single-container) instead, OR
|
|
|
|
|
# → keep this file but switch to NAMED VOLUMES (the default) instead of bind mounts
|
|
|
|
|
# - You're on Podman 3.4 or older without keep-id namespace support
|
|
|
|
|
# → see https://github.com/sunnysktsang/hermes-suite for an all-in-one image
|
2026-04-12 07:37:35 +00:00
|
|
|
#
|
v0.50.260: Docker reliability batch - PR #1428 + broader UX/docs improvements + Opus advisor fixes
Combines PR #1428 (UID/GID alignment) with a broader Docker reliability pass
that addresses recurring user reports about compose files not working.
Constituent PR:
- #1428 sunnysktsang - Align agent UID/GID with webui (fixes #1399).
Two- and three-container compose files had agent at UID 10000 (image
default) and webui at UID 1000 (WANTED_UID default), causing permission
denied on shared hermes-home volume. All services now use ${UID:-1000}.
Plus broader Docker UX overhaul:
- All 3 compose files document HERMES_SKIP_CHMOD/HERMES_HOME_MODE escape
hatches inline (the v0.50.254 fix wasn't surfaced for Docker users).
- New .env.docker.example template covering UID/GID, paths, password,
permission handling. UID/GID are uncommented with placeholder values
per Opus advisor (so macOS users don't skim past).
- New docs/docker.md - comprehensive guide: 5-min quickstart, failure
mode table with one-line fixes, bind-mount migration, multi-container
architecture diagram, macOS Docker Desktop VirtioFS note, link to
community sunnysktsang/hermes-suite all-in-one image.
- README Docker section rewritten - clearer quickstart, failure-mode
table, link to docs/docker.md. Stale /root/.hermes references removed.
Plus Opus pre-release advisor MUST-FIX:
- HERMES_HOME_MODE has DIFFERENT semantics in the WebUI vs the agent
image. WebUI: credential-file mode threshold (0640 allows group bits).
Agent: HERMES_HOME directory mode (default 0700). 0640 on a directory
has no owner-execute bit, so the agent can't traverse its own home and
bricks. My initial draft recommended HERMES_HOME_MODE=0640 in agent
service blocks - corrected to 0750 across all 4 surfaces (compose
files, .env.docker.example, docs/docker.md). 3 regression tests pin
the asymmetry.
12 regression tests total in test_v050260_docker_invariants.py.
Full suite: 3627 passed, 0 failed.
Nathan explicitly authorized merge with my own review + Opus only, no
independent review needed.
2026-05-01 23:09:50 +00:00
|
|
|
# KNOWN LIMITATION (#681): tools triggered from the WebUI run in the WebUI
|
|
|
|
|
# container, not the agent container. If you need git/node/etc. on the
|
|
|
|
|
# WebUI's filesystem, install them in the WebUI image — or use a single-
|
|
|
|
|
# container setup where everything lives in one place.
|
2026-04-22 23:35:09 +00:00
|
|
|
#
|
|
|
|
|
# NOTE ON VOLUMES:
|
|
|
|
|
# This file uses named Docker volumes (hermes-home, hermes-agent-src) which
|
v0.50.260: Docker reliability batch - PR #1428 + broader UX/docs improvements + Opus advisor fixes
Combines PR #1428 (UID/GID alignment) with a broader Docker reliability pass
that addresses recurring user reports about compose files not working.
Constituent PR:
- #1428 sunnysktsang - Align agent UID/GID with webui (fixes #1399).
Two- and three-container compose files had agent at UID 10000 (image
default) and webui at UID 1000 (WANTED_UID default), causing permission
denied on shared hermes-home volume. All services now use ${UID:-1000}.
Plus broader Docker UX overhaul:
- All 3 compose files document HERMES_SKIP_CHMOD/HERMES_HOME_MODE escape
hatches inline (the v0.50.254 fix wasn't surfaced for Docker users).
- New .env.docker.example template covering UID/GID, paths, password,
permission handling. UID/GID are uncommented with placeholder values
per Opus advisor (so macOS users don't skim past).
- New docs/docker.md - comprehensive guide: 5-min quickstart, failure
mode table with one-line fixes, bind-mount migration, multi-container
architecture diagram, macOS Docker Desktop VirtioFS note, link to
community sunnysktsang/hermes-suite all-in-one image.
- README Docker section rewritten - clearer quickstart, failure-mode
table, link to docs/docker.md. Stale /root/.hermes references removed.
Plus Opus pre-release advisor MUST-FIX:
- HERMES_HOME_MODE has DIFFERENT semantics in the WebUI vs the agent
image. WebUI: credential-file mode threshold (0640 allows group bits).
Agent: HERMES_HOME directory mode (default 0700). 0640 on a directory
has no owner-execute bit, so the agent can't traverse its own home and
bricks. My initial draft recommended HERMES_HOME_MODE=0640 in agent
service blocks - corrected to 0750 across all 4 surfaces (compose
files, .env.docker.example, docs/docker.md). 3 regression tests pin
the asymmetry.
12 regression tests total in test_v050260_docker_invariants.py.
Full suite: 3627 passed, 0 failed.
Nathan explicitly authorized merge with my own review + Opus only, no
independent review needed.
2026-05-01 23:09:50 +00:00
|
|
|
# work out of the box on every Docker installation. If you prefer bind mounts
|
|
|
|
|
# to share an existing host directory:
|
2026-04-22 23:35:09 +00:00
|
|
|
#
|
v0.50.260: Docker reliability batch - PR #1428 + broader UX/docs improvements + Opus advisor fixes
Combines PR #1428 (UID/GID alignment) with a broader Docker reliability pass
that addresses recurring user reports about compose files not working.
Constituent PR:
- #1428 sunnysktsang - Align agent UID/GID with webui (fixes #1399).
Two- and three-container compose files had agent at UID 10000 (image
default) and webui at UID 1000 (WANTED_UID default), causing permission
denied on shared hermes-home volume. All services now use ${UID:-1000}.
Plus broader Docker UX overhaul:
- All 3 compose files document HERMES_SKIP_CHMOD/HERMES_HOME_MODE escape
hatches inline (the v0.50.254 fix wasn't surfaced for Docker users).
- New .env.docker.example template covering UID/GID, paths, password,
permission handling. UID/GID are uncommented with placeholder values
per Opus advisor (so macOS users don't skim past).
- New docs/docker.md - comprehensive guide: 5-min quickstart, failure
mode table with one-line fixes, bind-mount migration, multi-container
architecture diagram, macOS Docker Desktop VirtioFS note, link to
community sunnysktsang/hermes-suite all-in-one image.
- README Docker section rewritten - clearer quickstart, failure-mode
table, link to docs/docker.md. Stale /root/.hermes references removed.
Plus Opus pre-release advisor MUST-FIX:
- HERMES_HOME_MODE has DIFFERENT semantics in the WebUI vs the agent
image. WebUI: credential-file mode threshold (0640 allows group bits).
Agent: HERMES_HOME directory mode (default 0700). 0640 on a directory
has no owner-execute bit, so the agent can't traverse its own home and
bricks. My initial draft recommended HERMES_HOME_MODE=0640 in agent
service blocks - corrected to 0750 across all 4 surfaces (compose
files, .env.docker.example, docs/docker.md). 3 regression tests pin
the asymmetry.
12 regression tests total in test_v050260_docker_invariants.py.
Full suite: 3627 passed, 0 failed.
Nathan explicitly authorized merge with my own review + Opus only, no
independent review needed.
2026-05-01 23:09:50 +00:00
|
|
|
# volumes:
|
|
|
|
|
# hermes-home:
|
|
|
|
|
# driver: local
|
|
|
|
|
# driver_opts:
|
|
|
|
|
# type: none
|
|
|
|
|
# o: bind
|
|
|
|
|
# device: /home/youruser/.hermes
|
2026-04-22 23:35:09 +00:00
|
|
|
#
|
v0.50.260: Docker reliability batch - PR #1428 + broader UX/docs improvements + Opus advisor fixes
Combines PR #1428 (UID/GID alignment) with a broader Docker reliability pass
that addresses recurring user reports about compose files not working.
Constituent PR:
- #1428 sunnysktsang - Align agent UID/GID with webui (fixes #1399).
Two- and three-container compose files had agent at UID 10000 (image
default) and webui at UID 1000 (WANTED_UID default), causing permission
denied on shared hermes-home volume. All services now use ${UID:-1000}.
Plus broader Docker UX overhaul:
- All 3 compose files document HERMES_SKIP_CHMOD/HERMES_HOME_MODE escape
hatches inline (the v0.50.254 fix wasn't surfaced for Docker users).
- New .env.docker.example template covering UID/GID, paths, password,
permission handling. UID/GID are uncommented with placeholder values
per Opus advisor (so macOS users don't skim past).
- New docs/docker.md - comprehensive guide: 5-min quickstart, failure
mode table with one-line fixes, bind-mount migration, multi-container
architecture diagram, macOS Docker Desktop VirtioFS note, link to
community sunnysktsang/hermes-suite all-in-one image.
- README Docker section rewritten - clearer quickstart, failure-mode
table, link to docs/docker.md. Stale /root/.hermes references removed.
Plus Opus pre-release advisor MUST-FIX:
- HERMES_HOME_MODE has DIFFERENT semantics in the WebUI vs the agent
image. WebUI: credential-file mode threshold (0640 allows group bits).
Agent: HERMES_HOME directory mode (default 0700). 0640 on a directory
has no owner-execute bit, so the agent can't traverse its own home and
bricks. My initial draft recommended HERMES_HOME_MODE=0640 in agent
service blocks - corrected to 0750 across all 4 surfaces (compose
files, .env.docker.example, docs/docker.md). 3 regression tests pin
the asymmetry.
12 regression tests total in test_v050260_docker_invariants.py.
Full suite: 3627 passed, 0 failed.
Nathan explicitly authorized merge with my own review + Opus only, no
independent review needed.
2026-05-01 23:09:50 +00:00
|
|
|
# When using bind mounts, BOTH containers must mount the same host path,
|
|
|
|
|
# AND your host directory must be readable by UID 1000 (the default). Run:
|
|
|
|
|
# id -u && id -g
|
|
|
|
|
# to find your host UID/GID, then put them in a .env file:
|
|
|
|
|
# echo "UID=$(id -u)" >> .env
|
|
|
|
|
# echo "GID=$(id -g)" >> .env
|
2026-04-12 07:37:35 +00:00
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
hermes-agent:
|
|
|
|
|
image: nousresearch/hermes-agent:latest
|
|
|
|
|
container_name: hermes-agent
|
2026-04-19 07:10:05 +00:00
|
|
|
command: gateway run
|
|
|
|
|
ports:
|
|
|
|
|
# Gateway API — exposed on localhost only.
|
|
|
|
|
# Other containers on hermes-net reach it via http://hermes-agent:8642.
|
|
|
|
|
# Remove 127.0.0.1: to expose on the host network (e.g. for remote clients).
|
|
|
|
|
- "127.0.0.1:8642:8642"
|
2026-04-12 07:37:35 +00:00
|
|
|
volumes:
|
|
|
|
|
# Persist config, state, sessions, skills, memory across restarts
|
2026-04-24 19:54:05 +00:00
|
|
|
- hermes-home:/home/hermes/.hermes
|
2026-04-12 07:37:35 +00:00
|
|
|
# Expose agent source so the WebUI can install dependencies from it
|
|
|
|
|
- hermes-agent-src:/opt/hermes
|
|
|
|
|
environment:
|
2026-04-24 19:54:05 +00:00
|
|
|
- HERMES_HOME=/home/hermes/.hermes
|
2026-05-01 22:44:25 +00:00
|
|
|
# Align UID/GID across containers sharing the hermes-home volume.
|
|
|
|
|
# Defaults to 1000 to match WANTED_UID/WANTED_GID in the webui service.
|
v0.50.260: Docker reliability batch - PR #1428 + broader UX/docs improvements + Opus advisor fixes
Combines PR #1428 (UID/GID alignment) with a broader Docker reliability pass
that addresses recurring user reports about compose files not working.
Constituent PR:
- #1428 sunnysktsang - Align agent UID/GID with webui (fixes #1399).
Two- and three-container compose files had agent at UID 10000 (image
default) and webui at UID 1000 (WANTED_UID default), causing permission
denied on shared hermes-home volume. All services now use ${UID:-1000}.
Plus broader Docker UX overhaul:
- All 3 compose files document HERMES_SKIP_CHMOD/HERMES_HOME_MODE escape
hatches inline (the v0.50.254 fix wasn't surfaced for Docker users).
- New .env.docker.example template covering UID/GID, paths, password,
permission handling. UID/GID are uncommented with placeholder values
per Opus advisor (so macOS users don't skim past).
- New docs/docker.md - comprehensive guide: 5-min quickstart, failure
mode table with one-line fixes, bind-mount migration, multi-container
architecture diagram, macOS Docker Desktop VirtioFS note, link to
community sunnysktsang/hermes-suite all-in-one image.
- README Docker section rewritten - clearer quickstart, failure-mode
table, link to docs/docker.md. Stale /root/.hermes references removed.
Plus Opus pre-release advisor MUST-FIX:
- HERMES_HOME_MODE has DIFFERENT semantics in the WebUI vs the agent
image. WebUI: credential-file mode threshold (0640 allows group bits).
Agent: HERMES_HOME directory mode (default 0700). 0640 on a directory
has no owner-execute bit, so the agent can't traverse its own home and
bricks. My initial draft recommended HERMES_HOME_MODE=0640 in agent
service blocks - corrected to 0750 across all 4 surfaces (compose
files, .env.docker.example, docs/docker.md). 3 regression tests pin
the asymmetry.
12 regression tests total in test_v050260_docker_invariants.py.
Full suite: 3627 passed, 0 failed.
Nathan explicitly authorized merge with my own review + Opus only, no
independent review needed.
2026-05-01 23:09:50 +00:00
|
|
|
# The agent image's entrypoint already supports usermod remapping.
|
2026-05-01 22:44:25 +00:00
|
|
|
- HERMES_UID=${UID:-1000}
|
|
|
|
|
- HERMES_GID=${GID:-1000}
|
v0.50.260: Docker reliability batch - PR #1428 + broader UX/docs improvements + Opus advisor fixes
Combines PR #1428 (UID/GID alignment) with a broader Docker reliability pass
that addresses recurring user reports about compose files not working.
Constituent PR:
- #1428 sunnysktsang - Align agent UID/GID with webui (fixes #1399).
Two- and three-container compose files had agent at UID 10000 (image
default) and webui at UID 1000 (WANTED_UID default), causing permission
denied on shared hermes-home volume. All services now use ${UID:-1000}.
Plus broader Docker UX overhaul:
- All 3 compose files document HERMES_SKIP_CHMOD/HERMES_HOME_MODE escape
hatches inline (the v0.50.254 fix wasn't surfaced for Docker users).
- New .env.docker.example template covering UID/GID, paths, password,
permission handling. UID/GID are uncommented with placeholder values
per Opus advisor (so macOS users don't skim past).
- New docs/docker.md - comprehensive guide: 5-min quickstart, failure
mode table with one-line fixes, bind-mount migration, multi-container
architecture diagram, macOS Docker Desktop VirtioFS note, link to
community sunnysktsang/hermes-suite all-in-one image.
- README Docker section rewritten - clearer quickstart, failure-mode
table, link to docs/docker.md. Stale /root/.hermes references removed.
Plus Opus pre-release advisor MUST-FIX:
- HERMES_HOME_MODE has DIFFERENT semantics in the WebUI vs the agent
image. WebUI: credential-file mode threshold (0640 allows group bits).
Agent: HERMES_HOME directory mode (default 0700). 0640 on a directory
has no owner-execute bit, so the agent can't traverse its own home and
bricks. My initial draft recommended HERMES_HOME_MODE=0640 in agent
service blocks - corrected to 0750 across all 4 surfaces (compose
files, .env.docker.example, docs/docker.md). 3 regression tests pin
the asymmetry.
12 regression tests total in test_v050260_docker_invariants.py.
Full suite: 3627 passed, 0 failed.
Nathan explicitly authorized merge with my own review + Opus only, no
independent review needed.
2026-05-01 23:09:50 +00:00
|
|
|
# Bind-mount permission handling for the agent — narrow set of overrides.
|
|
|
|
|
# NOTE: The agent's HERMES_HOME_MODE applies to the HERMES_HOME *directory*
|
|
|
|
|
# mode (default 0700) — NOT to credential files like the WebUI's variant.
|
|
|
|
|
# If you set this, you MUST keep the owner-execute bit so the agent can
|
|
|
|
|
# traverse its own home directory. 0640 BREAKS the agent (no x bit → no
|
|
|
|
|
# traversal). Use 0750 for group-traversable or 0701 for x-only.
|
|
|
|
|
# The agent's container detection (/.dockerenv) already auto-skips
|
|
|
|
|
# credential chmod inside Docker, so HERMES_SKIP_CHMOD is redundant here.
|
|
|
|
|
# - HERMES_HOME_MODE=0750
|
2026-04-12 07:37:35 +00:00
|
|
|
restart: unless-stopped
|
2026-04-19 07:10:05 +00:00
|
|
|
networks:
|
|
|
|
|
- hermes-net
|
2026-04-12 07:37:35 +00:00
|
|
|
|
|
|
|
|
hermes-webui:
|
|
|
|
|
image: ghcr.io/nesquena/hermes-webui:latest
|
|
|
|
|
container_name: hermes-webui
|
|
|
|
|
depends_on:
|
|
|
|
|
- hermes-agent
|
|
|
|
|
ports:
|
|
|
|
|
- "127.0.0.1:8787:8787"
|
|
|
|
|
volumes:
|
|
|
|
|
# Same hermes home as the agent — shares config, sessions, state
|
|
|
|
|
- hermes-home:/home/hermeswebui/.hermes
|
|
|
|
|
# Agent source mounted where docker_init.bash expects it.
|
2026-05-17 17:18:39 +00:00
|
|
|
# Mounted read-only — the WebUI only reads this volume to install
|
|
|
|
|
# the agent's Python dependencies at startup (`uv pip install`).
|
|
|
|
|
# Read-only enforces that defence-in-depth at the kernel layer.
|
|
|
|
|
- hermes-agent-src:/home/hermeswebui/.hermes/hermes-agent:ro
|
2026-04-12 20:46:59 +00:00
|
|
|
# Workspace directory — browse and edit files from the WebUI.
|
|
|
|
|
# Adapt the host path to your project directory.
|
2026-04-19 07:10:05 +00:00
|
|
|
# Override with: HERMES_WORKSPACE=/your/path docker compose up
|
2026-05-17 17:18:39 +00:00
|
|
|
# ${HOME} is used rather than `~` so the default resolves the same way
|
|
|
|
|
# across Linux, macOS, WSL2, and Docker Desktop on Windows.
|
|
|
|
|
- ${HERMES_WORKSPACE:-${HOME}/workspace}:/workspace
|
2026-04-12 07:37:35 +00:00
|
|
|
environment:
|
|
|
|
|
- HERMES_WEBUI_HOST=0.0.0.0
|
|
|
|
|
- HERMES_WEBUI_PORT=8787
|
2026-04-19 07:10:05 +00:00
|
|
|
- HERMES_WEBUI_STATE_DIR=/home/hermeswebui/.hermes/webui
|
2026-04-18 17:09:59 +00:00
|
|
|
# Match your host user's UID/GID for correct file permissions.
|
|
|
|
|
# In two-container setups the WebUI auto-detects UID/GID from the shared
|
|
|
|
|
# hermes-home volume, but you can override explicitly if needed (#668):
|
2026-04-19 07:10:05 +00:00
|
|
|
# Run `id -u` and `id -g` to find your values.
|
|
|
|
|
# On macOS, UIDs start at 501 — set these in a .env file:
|
|
|
|
|
# echo "UID=$(id -u)" >> .env && echo "GID=$(id -g)" >> .env
|
2026-04-12 07:37:35 +00:00
|
|
|
- WANTED_UID=${UID:-1000}
|
|
|
|
|
- WANTED_GID=${GID:-1000}
|
|
|
|
|
# Optional: set a password for remote access
|
v0.50.260: Docker reliability batch - PR #1428 + broader UX/docs improvements + Opus advisor fixes
Combines PR #1428 (UID/GID alignment) with a broader Docker reliability pass
that addresses recurring user reports about compose files not working.
Constituent PR:
- #1428 sunnysktsang - Align agent UID/GID with webui (fixes #1399).
Two- and three-container compose files had agent at UID 10000 (image
default) and webui at UID 1000 (WANTED_UID default), causing permission
denied on shared hermes-home volume. All services now use ${UID:-1000}.
Plus broader Docker UX overhaul:
- All 3 compose files document HERMES_SKIP_CHMOD/HERMES_HOME_MODE escape
hatches inline (the v0.50.254 fix wasn't surfaced for Docker users).
- New .env.docker.example template covering UID/GID, paths, password,
permission handling. UID/GID are uncommented with placeholder values
per Opus advisor (so macOS users don't skim past).
- New docs/docker.md - comprehensive guide: 5-min quickstart, failure
mode table with one-line fixes, bind-mount migration, multi-container
architecture diagram, macOS Docker Desktop VirtioFS note, link to
community sunnysktsang/hermes-suite all-in-one image.
- README Docker section rewritten - clearer quickstart, failure-mode
table, link to docs/docker.md. Stale /root/.hermes references removed.
Plus Opus pre-release advisor MUST-FIX:
- HERMES_HOME_MODE has DIFFERENT semantics in the WebUI vs the agent
image. WebUI: credential-file mode threshold (0640 allows group bits).
Agent: HERMES_HOME directory mode (default 0700). 0640 on a directory
has no owner-execute bit, so the agent can't traverse its own home and
bricks. My initial draft recommended HERMES_HOME_MODE=0640 in agent
service blocks - corrected to 0750 across all 4 surfaces (compose
files, .env.docker.example, docs/docker.md). 3 regression tests pin
the asymmetry.
12 regression tests total in test_v050260_docker_invariants.py.
Full suite: 3627 passed, 0 failed.
Nathan explicitly authorized merge with my own review + Opus only, no
independent review needed.
2026-05-01 23:09:50 +00:00
|
|
|
# - HERMES_WEBUI_PASSWORD=your-secret-password
|
|
|
|
|
# Bind-mount permission handling for the WebUI (fixes #1389, #1399).
|
|
|
|
|
# NOTE: WebUI's HERMES_HOME_MODE is a credential-file threshold (allow
|
|
|
|
|
# group bits on .env/.signing_key/etc.), DIFFERENT from the agent's
|
|
|
|
|
# which applies to the HERMES_HOME directory itself. 0640 is correct
|
|
|
|
|
# for the WebUI; do NOT copy this value to the agent service block.
|
|
|
|
|
# - HERMES_SKIP_CHMOD=1
|
|
|
|
|
# - HERMES_HOME_MODE=0640
|
2026-04-12 07:37:35 +00:00
|
|
|
restart: unless-stopped
|
2026-04-19 07:10:05 +00:00
|
|
|
networks:
|
|
|
|
|
- hermes-net
|
|
|
|
|
|
|
|
|
|
networks:
|
|
|
|
|
hermes-net:
|
|
|
|
|
driver: bridge
|
2026-04-12 07:37:35 +00:00
|
|
|
|
|
|
|
|
volumes:
|
2026-05-17 17:18:39 +00:00
|
|
|
# IMPORTANT — upgrading the agent image:
|
|
|
|
|
# The `hermes-agent-src` volume is initialised from the agent image's
|
|
|
|
|
# `/opt/hermes` on first `up`, and Docker reuses the volume verbatim on
|
|
|
|
|
# later runs — even after `docker pull` of a newer agent image. After
|
|
|
|
|
# upgrading the agent image, run:
|
|
|
|
|
#
|
|
|
|
|
# docker compose down
|
|
|
|
|
# docker volume rm <project>_hermes-agent-src
|
|
|
|
|
# docker compose pull
|
|
|
|
|
# docker compose up -d
|
|
|
|
|
#
|
|
|
|
|
# The full procedure (and why) is documented in docs/docker.md.
|
2026-04-12 07:37:35 +00:00
|
|
|
hermes-home:
|
|
|
|
|
hermes-agent-src:
|