Docker-Compose-Pfad automatisch ermitteln (Compose-Labels) statt manueller Eingabe #31

Closed
opened 2026-06-01 21:39:30 +00:00 by chinux · 0 comments
Owner

Frage (beantwortet): Kann der Agent den Compose-Pfad selbst finden?

Ja, zuverlässig — ohne Raten/Filesystem-Suche. Docker Compose (v2) setzt auf jeden erzeugten Container Labels:

  • com.docker.compose.project — Projektname
  • com.docker.compose.project.working_dir — Verzeichnis, in dem docker compose lief
  • com.docker.compose.project.config_files — die konkreten Compose-Dateipfade (komma-separiert)
  • com.docker.compose.service — Service-Name

Container ohne Compose (bare docker run) haben die Labels nicht → kein Pfad (korrekt).

Heutiger Stand

Compose-Pfade werden manuell gepflegt: server/routers/docker_router.py /compose-config (GET/PATCH compose_paths), Eingabe im DockerTab (composePathInput/saveComposeConfig). Die Agent-Commands docker.compose_check/docker.compose_update (Node-Agent/src/docker_compose.rs) bekommen den path von dort. Der Gast-Collector collect_docker erfasst per docker ps nur name/image/status/ports — keine Labels/Pfade.

Soll: Auto-Discovery im Gast-Agent

1. Collector erweitern (Labels mitlesen)

VM-Guest-Agent/src/collect/linux.rs:194 (analog collect/freebsd.rs + Windows-VM-Guest-Agent/src/collect.rs): das docker ps --format um die Compose-Labels erweitern, z. B.:

docker ps --format '{"name":"{{.Names}}","image":"{{.Image}}","status":"{{.Status}}","ports":"{{.Ports}}","compose_project":"{{.Label "com.docker.compose.project"}}","compose_workdir":"{{.Label "com.docker.compose.project.working_dir"}}","compose_files":"{{.Label "com.docker.compose.project.config_files"}}","compose_service":"{{.Label "com.docker.compose.service"}}"}'

(Alternative für reine Projekt-Sicht: docker compose ls --format json → liefert ConfigPaths je laufendem Projekt. docker ps-Labels sind aber minimal und decken auch den Service ab.)

2. Ingest / abgeleitete Liste

Backend-vm_scan-Ingest: die neuen Felder je Container in vm_scans[vmid].docker durchreichen und eine deduplizierte compose_paths-Liste (distinct compose_files) ableiten.

3. Manuelle Pflege ablösen (optional, empfohlen)

Die entdeckten Pfade in die DockerComposeConfig mergen, sodass compose_check/compose_update ohne manuelle Eingabe funktionieren. DockerTab: entdeckte Pfade anzeigen (read-only), manuelles Hinzufügen nur noch für Sonderfälle.

4. docgen (#17)

Die Docker-Sektion in _vm_md liest dann vm_scans[vmid].docker[*] inkl. compose_workdir/compose_files → „Laufende Docker + Pfad".

Caveats

  • Labels nur bei Compose-v2-Containern zuverlässig (working_dir + config_files); Compose v1 hat ggf. nur project.
  • config_files kann mehrere Dateien (komma-separiert) enthalten.
  • Nur laufende Container erscheinen in docker ps; gestoppte Compose-Projekte deckt das nicht ab → dafür bleibt die manuelle Config bzw. docker compose ls -a.

Akzeptanz

  • Gast meldet je Compose-Container Projekt + working_dir + config_files; theProx hat pro VM die laufenden Compose-Pfade ohne manuelle Eingabe.
  • docgen #17 kann „Docker + Pfad" rendern.
  • cargo build (Linux/FreeBSD/Windows-Target) grün — vor Merge bauen.

Bezug

Liefert den fehlenden Baustein für #17 (Docker-Pfad) und löst die manuelle compose_paths-Pflege ab.

Branch

feat/docker-compose-autodiscover

## Frage (beantwortet): Kann der Agent den Compose-Pfad selbst finden? **Ja, zuverlässig — ohne Raten/Filesystem-Suche.** Docker Compose (v2) setzt auf jeden erzeugten Container Labels: - `com.docker.compose.project` — Projektname - `com.docker.compose.project.working_dir` — Verzeichnis, in dem `docker compose` lief - `com.docker.compose.project.config_files` — die konkreten Compose-Dateipfade (komma-separiert) - `com.docker.compose.service` — Service-Name Container ohne Compose (bare `docker run`) haben die Labels nicht → kein Pfad (korrekt). ## Heutiger Stand Compose-Pfade werden **manuell** gepflegt: `server/routers/docker_router.py` `/compose-config` (GET/PATCH `compose_paths`), Eingabe im `DockerTab` (`composePathInput`/`saveComposeConfig`). Die Agent-Commands `docker.compose_check`/`docker.compose_update` (`Node-Agent/src/docker_compose.rs`) bekommen den `path` von dort. Der Gast-Collector `collect_docker` erfasst per `docker ps` nur name/image/status/ports — **keine** Labels/Pfade. ## Soll: Auto-Discovery im Gast-Agent ### 1. Collector erweitern (Labels mitlesen) `VM-Guest-Agent/src/collect/linux.rs:194` (analog `collect/freebsd.rs` + `Windows-VM-Guest-Agent/src/collect.rs`): das `docker ps --format` um die Compose-Labels erweitern, z. B.: ``` docker ps --format '{"name":"{{.Names}}","image":"{{.Image}}","status":"{{.Status}}","ports":"{{.Ports}}","compose_project":"{{.Label "com.docker.compose.project"}}","compose_workdir":"{{.Label "com.docker.compose.project.working_dir"}}","compose_files":"{{.Label "com.docker.compose.project.config_files"}}","compose_service":"{{.Label "com.docker.compose.service"}}"}' ``` (Alternative für reine Projekt-Sicht: `docker compose ls --format json` → liefert `ConfigPaths` je laufendem Projekt. `docker ps`-Labels sind aber minimal und decken auch den Service ab.) ### 2. Ingest / abgeleitete Liste Backend-`vm_scan`-Ingest: die neuen Felder je Container in `vm_scans[vmid].docker` durchreichen **und** eine deduplizierte `compose_paths`-Liste (distinct `compose_files`) ableiten. ### 3. Manuelle Pflege ablösen (optional, empfohlen) Die entdeckten Pfade in die `DockerComposeConfig` mergen, sodass `compose_check`/`compose_update` ohne manuelle Eingabe funktionieren. DockerTab: entdeckte Pfade anzeigen (read-only), manuelles Hinzufügen nur noch für Sonderfälle. ### 4. docgen (#17) Die Docker-Sektion in `_vm_md` liest dann `vm_scans[vmid].docker[*]` inkl. `compose_workdir`/`compose_files` → „Laufende Docker + Pfad". ## Caveats - Labels nur bei Compose-**v2**-Containern zuverlässig (working_dir + config_files); Compose v1 hat ggf. nur `project`. - `config_files` kann mehrere Dateien (komma-separiert) enthalten. - Nur **laufende** Container erscheinen in `docker ps`; gestoppte Compose-Projekte deckt das nicht ab → dafür bleibt die manuelle Config bzw. `docker compose ls -a`. ## Akzeptanz - Gast meldet je Compose-Container Projekt + working_dir + config_files; theProx hat pro VM die laufenden Compose-Pfade ohne manuelle Eingabe. - docgen #17 kann „Docker + Pfad" rendern. - `cargo build` (Linux/FreeBSD/Windows-Target) grün — vor Merge bauen. ## Bezug Liefert den fehlenden Baustein für #17 (Docker-Pfad) und löst die manuelle `compose_paths`-Pflege ab. ## Branch `feat/docker-compose-autodiscover`
chinux 2026-06-01 21:39:30 +00:00
  • closed this issue
  • added the
    agent
    label
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
chinux/theProx#31
No description provided.