Zum Inhalt springen

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.

{
"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 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.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.

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

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.