Bind-Mount-Discipline¶
Prinzip¶
Docker-Single-File-Bind-Mounts halten an der Host-Datei-Inode fest.
Wenn ein Tool (Editor, sed, mv-replace) die Host-Datei neu schreibt,
sieht der Container weiterhin den alten Inhalt. docker compose
restart reicht nicht, nur --force-recreate löst den Mount neu auf.
Konsequenz: Configs für containerisierte Services im
kora-platform-Stack werden als Dir-Mounts gemountet, nicht als
Single-File-Mounts. Details siehe
L-B3-06 in offene-todos.md.
Status im kora-platform-Stack¶
Vollständige Dir-Mount-Disziplin:
| Service | Host-Dir | Container-Pfad | Commit |
|---|---|---|---|
| kora-platform-mkdocs | docs-kora/ |
/docs/ |
mkdocs-Hygiene (80d1c1b) |
| avs-prometheus | monitoring/prometheus/ |
/etc/prometheus/ |
Cleanup03-01 |
Prometheus scrapt sowohl die AVS-Demo als auch den Platform-API — die Umstellung hier löst den konkreten Pain aus L-B3-06 (Prometheus-Scrape- Arbeit), auch wenn die Prometheus-Service-Definition im AVS-Demo-Compose liegt.
AVS-Demo-Stack (docker-compose.yml)¶
10 weitere Single-File-Bind-Mounts existieren im AVS-Demo-Stack. Sie wurden bewusst nicht umgestellt, weil der Stack per Go-Live v1.0.0 komplett abgeschaltet wird (Fundament §16 „frische Leinwand"):
| Zeile | Service | Datei | Grund |
|---|---|---|---|
| 146 | vllm-lb | nginx-vllm-lb/nginx.conf.template |
AVS-Demo, post-Go-Live obsolet |
| 195 | avs-api | CHANGELOG-avs-demo.md |
Static, wenig Friction |
| 196 | avs-api | data/geoip/GeoLite2-City.mmdb |
Data-Lookup-DB, kein Config |
| 237 | nginx | infra/nginx/nginx.conf |
AVS-Demo, post-Go-Live obsolet |
| 239 | nginx | infra/nginx/.htpasswd_presentation |
AVS-Demo, Secret, selten geändert |
| 240 | nginx | src/widget/demo-avs.html |
AVS-Demo, Static |
| 241 | nginx | src/widget/chat-avs.html |
AVS-Demo, Static |
| 264 | avs-mkdocs | mkdocs.yml |
AVS-Demo, post-Go-Live obsolet |
| 266 | avs-mkdocs | CHANGELOG-avs-demo.md |
AVS-Demo, Static |
| 404 | keycloak | infra/keycloak/avs-chatbot-realm.json |
Import-Once (nur beim ersten Realm-Create) |
Arbeit an Stack-Artefakten mit Ablaufdatum wäre fehlallokiert. Falls jemand vor Go-Live doch ein konkretes Dev-Friction-Szenario an einer dieser Stellen erlebt, kann die Umstellung punktuell nachgezogen werden — das Muster ist durch Prometheus und mkdocs-Hygiene etabliert.
Bei neuen Services¶
Wenn neue Services in den kora-platform-Stack aufgenommen werden, gilt Config als Dir-Mount, nicht als Single-File-Mount.
- Option A — Dir-Mount auf den erwarteten Container-Pfad
(z.B.
./monitoring/prometheus:/etc/prometheus:ro). Voraussetzung: Container-Dir enthält keine Container-eigenen Files, die überschrieben würden. Sauberste Form. - Option B — Dir-Mount auf eigenen Pfad + Command-Override
(
--config.file=/etc/kora-config/…). Einsetzbar, wenn A nicht möglich, weil der Container-Pfad Container-eigene Files enthält.
Akzeptanzkriterium¶
Live-Edit-Test. Marker-Change am Host + docker restart → Container
sieht den Marker:
MARKER="# live-edit-test-$(date +%s)"
echo "$MARKER" >> monitoring/prometheus/prometheus.yml
docker restart avs-prometheus
sleep 10
docker exec avs-prometheus grep "live-edit-test" /etc/prometheus/prometheus.yml
# erwartet: Treffer
git checkout monitoring/prometheus/prometheus.yml
docker restart avs-prometheus
--force-recreate als Fallback ist kein Akzeptanzkriterium — das
ist genau, was mit Dir-Mount-Disziplin eliminiert wird.