Registry & State
Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.
MultiDocker keeps all knowledge about a project in one place:
~/.config/multi-docker/registry.json. Your project directory holds only its unchanged
original compose file. Everything MultiDocker generates — overrides, certs, port maps — is
derived from the registry and can be regenerated at any time.
The registry is the source of truth
Section titled “The registry is the source of truth”{ "projects": { "aurora": { "path": "/abs/path/to/project", "profile": "shopware-dockware", "hostnames": ["aurora.coding9.test", "*.acme.coding9.test"], "created": "2026-03-14T10:22:01Z", "ai_session_path": "src/", // optional "editor_path": "apps/web", // optional "port_overrides": { // optional "redis": { "6379": 6380 } }, "sessions": [ // optional — AI/exec terminals { "id": "claude-1", "tool": "claude", "sandbox": true, "tmux_name": "mdocker__aurora__claude-1", "created": "2026-...", "service": "shop", "shell": "/bin/bash" } ] } }}Field semantics
Section titled “Field semantics”| Field | Required | Notes |
|---|---|---|
path |
yes | absolute path to the project |
profile |
yes | one of the detection outputs (or a custom profile name) |
hostnames |
yes (1+) | first entry is the primary; a legacy hostname string is auto-migrated |
created |
yes | ISO-8601; set once, preserved on update |
ai_session_path |
no | start path for AI terminal sessions |
editor_path |
no | per-project override for “open in editor” |
port_overrides |
no | { service: { container_port: host_port } }, rendered into <name>.ports.yml |
sessions |
no | active AI/exec terminal sessions |
All reads and writes go through helpers in lib/common.sh (registry_get,
registry_set_project, registry_add_hostname, registry_set_port_override, …). Nothing
parses the file by hand, and every mutator uses the safe mktemp + jq + mv pattern. Every
reader treats a missing field as absent and falls back to a default.
Config lives next to it
Section titled “Config lives next to it”config.env holds the global settings, sourced as plain KEY=VALUE:
| Key | Default | Purpose |
|---|---|---|
BASE_DOMAINS |
"coding9.test" |
space-separated; index 0 is primary |
EDGE_NETWORK |
multi-docker-edge |
external docker network name |
EDITOR_CMD |
unset | optional editor override for terminal exec |
EXEC_SHELL |
unset (/bin/bash) |
default container shell |
The older single-value BASE_DOMAIN field is auto-migrated to BASE_DOMAINS.
Derived vs. ephemeral state
Section titled “Derived vs. ephemeral state”Not everything is registry data. It helps to think in three tiers:
| Tier | Examples | Regenerable? |
|---|---|---|
| Source of truth | registry.json, config.env |
This is the truth |
| Derived | overrides/<name>.override.yml, <name>.ports.yml, edge.override.yml, the wildcard cert |
Yes — rebuilt from the registry (rerender, setup-tls) |
| Ephemeral runtime | share tunnels under state/tunnels/<project>__<host>.{json,log} |
Not persisted in the registry; pruned automatically when the process dies |
Snapshots
Section titled “Snapshots”Database dumps are stored under ~/.config/multi-docker/snapshots/<project>/, each named
<service>-<timestamp>.sql.gz with a <service>-latest symlink. See
Database Snapshots & Restore.
Cookie-Einstellungen
Statistik-Werkzeuge setzen wir nur ein, wenn du zustimmst. Die notwendige Speicherung hält die Seite funktionsfähig; alles andere bleibt aus, bis du entscheidest.
Speichert deine Entscheidung aus diesem Dialog in deinem Browser (localStorage). Kein Cookie, keine Weitergabe an Dritte.
Google Analytics 4 über den Google Tag Manager, um die Nutzung der Seite zu messen. Wird erst nach deiner Einwilligung geladen.