Phuriwaj

Hermes Docker — Profile Management

How to inspect, copy, and migrate Hermes Agent profiles between Docker instances.

Why / When to Use

When running multiple Hermes Docker instances (e.g. dev vs. prod, or migrating to a new host) and you need to move a user profile including its memories, conversations, and settings.

Core Concept / Commands

Hermes stores all profile data inside the container’s mounted volume. The simplest approach is to copy the entire profile folder.

1 — Find the volume mount on the source host

# Check docker-compose.yml for the volume definition
cat docker-compose.yml | grep -A 5 volumes
 
# Or inspect the running container directly
docker inspect <hermes_container> | grep -A 10 Mounts

2 — Locate the profile directory

The profile data typically lives at a path like:

<volume_mount_path>/profiles/<profile_name>/

Find it on the host:

docker exec -it <hermes_container> ls /path/to/data/profiles

3 — Copy the entire profile folder

Copy the whole folder — simpler and safer than cherry-picking individual files:

# From source host — tar the profile folder
docker exec <hermes_container> tar czf /tmp/profile-backup.tar.gz /path/to/data/profiles/<profile_name>
docker cp <hermes_container>:/tmp/profile-backup.tar.gz ./profile-backup.tar.gz

4 — Restore on the target host

# Copy the archive to the target host
scp profile-backup.tar.gz user@target-host:~/
 
# On target host — extract into the bind mount path
ssh user@target-host
docker cp ./profile-backup.tar.gz <target_hermes_container>:/tmp/
docker exec <target_hermes_container> tar xzf /tmp/profile-backup.tar.gz -C /

If the target Hermes uses a bind mount, extract directly into that host path:

tar xzf profile-backup.tar.gz -C /path/to/target/volume/

Key Options / Variants

  • Named volume: Use docker volume inspect to find the mountpoint on the host, then copy at the filesystem level.
  • Bind mount: Directly access the host path — no docker cp needed.
  • Whole profiles folder: If migrating all profiles, copy the entire profiles/ directory rather than a single profile subfolder.

Gotchas

  • Make sure the target Hermes container is stopped before copying profiles in, to avoid write conflicts on startup.
  • Profile folder names may be user IDs or slugs — check inside the container first with ls profiles/ before assuming the name.
  • Memory and conversation history live inside the profile folder, so a full folder copy captures everything.

Source

Conversation: “Hermes - Profile” — 2026-05-28

Weekly Summary — 2026-W22

Appeared: Thu 28 May Key developments this week:

  • Note created to document how to migrate Hermes profiles between Docker instances. Key finding: copy the entire profile folder from the Docker volume mount rather than cherry-picking individual files — simpler and avoids missing dependent files (memories, conversation history, settings all live in the same folder).
  • Documented the full workflow: docker inspect to find the mount path → tar + docker cp to extract from source → scp to target host → extract into target bind mount.

New things learned:

  • Hermes profile data lives at <volume_mount_path>/profiles/<profile_name>/ — one folder captures everything.
  • Target container should be stopped before copying profiles in to avoid write conflicts on startup.
  • Named volumes and bind mounts require slightly different copy approaches (docker volume inspect vs direct host path).

Open questions / next steps:

  • Run the Hermes profile copy command on target Docker host and verify profile loads correctly