feat(docker): default docker compose to pre-built images (#82) (#83)

Swap docker-compose.yml from local builds to pulling the official
upstream images by default. No more 'wait 10 minutes for git clone +
pip install + uv venv' on first run.

- hermes-agent   -> nousresearch/hermes-agent:latest (upstream)
- hermes-workspace -> ghcr.io/outsourc-e/hermes-workspace:latest (our GHCR)

Also:
- Persist agent state to a named 'hermes-data' volume mounted at /opt/data
  (config, sessions, skills, memory, creds survive container recreation).
- Add docker-compose.dev.yml overlay so contributors can still build from
  source via: docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build
- Harden the healthcheck to CMD-SHELL so exit codes propagate.
- README + CHANGELOG updated to match.

Closes #82.

Co-authored-by: Aurora <aurora@outsourc-e.dev>
This commit is contained in:
Eric
2026-04-20 23:08:59 -04:00
committed by GitHub
parent aa9c3154e3
commit d357005506
4 changed files with 75 additions and 19 deletions

View File

@@ -12,23 +12,30 @@
# 3. docker compose up
# 4. Open http://localhost:3000
#
# Enhanced Mode (sessions, skills, memory, config):
# The bundled agent Dockerfile builds from outsourc-e/hermes-agent which
# includes the enhanced gateway APIs. Vanilla NousResearch/hermes-agent
# will work in "portable" mode (chat only, no sessions/skills/memory).
# Images:
# This file pulls pre-built images by default — no local build required.
# - nousresearch/hermes-agent:latest (Project Agent, Dockerfile upstream)
# - ghcr.io/outsourc-e/hermes-workspace:latest (this workspace)
#
# To build from source instead (e.g. for development), use:
# docker compose -f docker-compose.yml -f docker-compose.dev.yml up
#
# Persistent data:
# The `hermes-data` named volume mounts at /opt/data inside the agent
# container. Config, sessions, skills, memory, and credentials live there
# and survive container recreation. For host-path mounts see the commented
# `volumes:` block on the hermes-agent service.
#
# Troubleshooting:
# - See README.md "Docker" troubleshooting section
# - Check logs: docker compose logs hermes-agent
# - Agent must expose port 8642 with: hermes gateway run
# - Agent must expose port 8642
services:
# The Hermes AI Agent Gateway
# Provides the backend API that the workspace connects to
hermes-agent:
build:
context: .
dockerfile: docker/agent/Dockerfile
image: nousresearch/hermes-agent:latest
env_file:
- .env
environment:
@@ -46,8 +53,13 @@ services:
API_SERVER_KEY: ${API_SERVER_KEY:-}
API_SERVER_HOST: ${API_SERVER_HOST:-0.0.0.0}
API_SERVER_ENABLED: 'true'
volumes:
# Persist agent state across container recreation. Swap for a
# host-path mount (e.g. `./data:/opt/data`) if you want to edit
# config/skills directly from the host.
- hermes-data:/opt/data
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:8642/health']
test: ['CMD-SHELL', 'curl -fsS http://localhost:8642/health || exit 1']
interval: 10s
timeout: 5s
retries: 5
@@ -58,9 +70,7 @@ services:
# The Project Workspace Web UI
# Connects to hermes-agent at http://hermes-agent:8642
hermes-workspace:
build:
context: .
dockerfile: docker/workspace/Dockerfile
image: ghcr.io/outsourc-e/hermes-workspace:latest
depends_on:
hermes-agent:
condition: service_healthy
@@ -73,3 +83,6 @@ services:
HERMES_API_TOKEN: ${API_SERVER_KEY:-}
ports:
- '3000:3000'
volumes:
hermes-data: