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:
@@ -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.
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user