fix(docker): improve two-container agent path discovery and docs — v0.50.158 (PR #873 by @bergeouss, closes #858)

docker_init.bash now checks /opt/hermes as a fallback alongside the primary path. Warning updated with concrete mount guidance. Volume type notes added to compose files and README.
This commit is contained in:
bergeouss
2026-04-23 01:35:09 +02:00
committed by GitHub
parent 0a75b3f1d3
commit a72208eaf6
4 changed files with 49 additions and 4 deletions

View File

@@ -189,6 +189,13 @@ This starts both containers with shared volumes:
- **`hermes-agent-src`** — the agent's source code, mounted into the WebUI - **`hermes-agent-src`** — the agent's source code, mounted into the WebUI
container so it can install the agent's Python dependencies at startup container so it can install the agent's Python dependencies at startup
> **Volume type:** The compose files use named Docker volumes by default.
> If you prefer bind mounts to an existing directory (e.g. for sharing state
> with an agent container you already run), both containers must mount the
> same host path — the agent writes to `/root/.hermes`, the WebUI reads from
> `/home/hermeswebui/.hermes`. See `docker-compose.two-container.yml` for
> a bind-mount example.
The WebUI's init script automatically installs hermes-agent and all its The WebUI's init script automatically installs hermes-agent and all its
dependencies (openai, anthropic, etc.) into its own Python environment on dependencies (openai, anthropic, etc.) into its own Python environment on
first boot. Subsequent restarts reuse the installed packages. first boot. Subsequent restarts reuse the installed packages.

View File

@@ -13,6 +13,12 @@
# #
# All three share the same hermes-home volume so config, sessions, # All three share the same hermes-home volume so config, sessions,
# skills, and memory are consistent across all surfaces. # skills, and memory are consistent across all surfaces.
#
# NOTE ON VOLUMES:
# This file uses named Docker volumes (hermes-home, hermes-agent-src) which
# work out of the box. If you prefer bind mounts (e.g. to an existing directory),
# see the two-container compose file for a bind-mount example.
# When using bind mounts, ALL containers must mount the same host path.
services: services:
hermes-agent: hermes-agent:

View File

@@ -10,6 +10,23 @@
# The agent container runs the gateway (CLI, Telegram, cron, etc.). # The agent container runs the gateway (CLI, Telegram, cron, etc.).
# The WebUI container serves the browser interface on port 8787. # The WebUI container serves the browser interface on port 8787.
# Both share ~/.hermes for config, sessions, and state. # Both share ~/.hermes for config, sessions, and state.
#
# NOTE ON VOLUMES:
# This file uses named Docker volumes (hermes-home, hermes-agent-src) which
# work out of the box. If you prefer bind mounts (e.g. to an existing directory),
# replace the named volumes at the bottom. Example for hermes-agent-src:
#
# hermes-agent-src:
# driver: local
# driver_opts:
# type: none
# o: bind
# device: /opt/hermes-agent
#
# When using bind mounts, BOTH containers must mount the same host path.
# The agent exposes source at /opt/hermes, the WebUI reads it from
# /home/hermeswebui/.hermes/hermes-agent — as long as both point to the
# same host directory, the paths align correctly.
services: services:
hermes-agent: hermes-agent:

View File

@@ -294,14 +294,29 @@ else
test -x /app/venv/bin/pip test -x /app/venv/bin/pip
echo ""; echo "== Adding hermes-agent's pyproject.toml base dependencies to the virtual environment" echo ""; echo "== Adding hermes-agent's pyproject.toml base dependencies to the virtual environment"
if [ -d "/home/hermeswebui/.hermes/hermes-agent" ] && [ -f "/home/hermeswebui/.hermes/hermes-agent/pyproject.toml" ]; then _agent_paths=(
uv pip install "/home/hermeswebui/.hermes/hermes-agent[honcho]" --trusted-host pypi.org --trusted-host files.pythonhosted.org || error_exit "Failed to install hermes-agent's requirements" "/home/hermeswebui/.hermes/hermes-agent"
"/opt/hermes"
)
_agent_src=""
for _p in "${_agent_paths[@]}"; do
if [ -d "$_p" ] && [ -f "$_p/pyproject.toml" ]; then
_agent_src="$_p"
break
fi
done
if [ -n "$_agent_src" ]; then
uv pip install "$_agent_src[honcho]" --trusted-host pypi.org --trusted-host files.pythonhosted.org || error_exit "Failed to install hermes-agent's requirements"
else else
echo "" echo ""
echo "!! WARNING: hermes-agent source not found at /home/hermeswebui/.hermes/hermes-agent" echo "!! WARNING: hermes-agent source not found."
echo "!! Looked in: ${_agent_paths[0]}"
echo "!! ${_agent_paths[1]}"
echo "!! The WebUI will start with reduced functionality (no model auto-detection," echo "!! The WebUI will start with reduced functionality (no model auto-detection,"
echo "!! no personality routing, no CLI session imports)." echo "!! no personality routing, no CLI session imports)."
echo "!! To fix: mount the agent source volume into the container. See:" echo "!! To fix: mount the agent source volume into the container:"
echo "!! -v /path/to/hermes-agent:/home/hermeswebui/.hermes/hermes-agent"
echo "!! Or see the two-container compose example:"
echo "!! https://github.com/nesquena/hermes-webui/blob/master/docker-compose.two-container.yml" echo "!! https://github.com/nesquena/hermes-webui/blob/master/docker-compose.two-container.yml"
echo "" echo ""
fi fi