← EP21 Internal Docs EP21 Backup Engine
ADR · ADR-0008 · v1.0.2

Container Runtime Connectivity and Ops Wrappers

accepted v1.0.0 accepted 2026-02-24 Authors: david.sorf Created: 2026-02-24 Updated: 2026-04-09
docker connectivity networking security ops-wrappers
Backup kontejner přistupuje k ostatním Docker kontejnerům přes socket mount a k host PostgreSQL přes host-gateway mapping. Standardizované provozní operace jsou zapouzdřeny ve wrapper skriptech v scripts/.
Related docs:

Kontext

Backup engine běží v izolovaném Docker kontejneru, ale musí:

1. Detekovat a zálohovat PostgreSQL running v jiných kontejnerech na stejném hostu

2. Přistoupit na PostgreSQL running přímo na hostu (mimo Docker)

3. Poskytnout standardizované provozní rozhraní pro adminy — start, stop, status, logy, ad-hoc příkazy

Bez explicitního řešení těchto tří bodů by backup kontejner byl izolovaný a nemohl plnit svoji funkci.

Zvažované alternativy pro inter-container přístup:

A) Custom Docker network bridge — komplikuje networking, vyžaduje konfiguraci per kontejner

B) Docker socket mount (zvoleno) — přímý přístup k Docker API, jednoduché a standardní

C) Kubernetes-style sidecar — overkill mimo K8s prostředí

Rozhodnutí

✓ Chosen: B — Docker socket mount pro inter-container přístup, host-gateway pro host PG, wrapper skripty pro ops

Docker socket mount

Přístup k ostatním kontejnerům přes:

-v /var/run/docker.sock:/var/run/docker.sock

Backup kontejner může docker ps, docker exec, docker inspect — detekuje a zálohuje DB kontejnery.

Host PostgreSQL přístup

PostgreSQL na hostu je dostupný přes:

--add-host host.docker.internal:host-gateway
BREW_PGHOST=host.docker.internal

Kontejner se připojí na host PG jako by byl na stejné síti. Vyžaduje správnou konfiguraci listen_addresses a pg_hba.conf na hostu.

Wrapper skripty (scripts/)

Standardizované operace jsou zapouzdřeny v bash wrapper skriptech:

  • start-backup-container.sh — kompletní lifecycle: preflight, volume creation, restic init, start
  • backup-container-status.sh — rychlý přehled stavu kontejneru a posledního běhu
  • backup-container-logs.sh — zobrazí scheduler logy
  • backup-container-daily.sh — spustí denní běh ad-hoc
  • backup-container-backup.sh — spustí pouze primary zálohu
  • backup-container-report.sh — zobrazí detection + backup report
  • backup-container-retention-report.sh — retention přehled
  • backup-container-storage-report.sh — storage usage
  • backup-container-shell.sh — interaktivní shell v kontejneru
  • backup-container-daily-recover.sh — stale lock recovery (viz ADR-0009)

Důsledky

Pozitivní:

Negativní:

Follow-up (TBD):

Changelog

VersionDateAuthorNote
1.0.22026-04-09claude-sonnet-4-6

Follow-up sekce doplněna o reference na ADR-0011 (sidecar privilege isolation) a ADR-0012 (VM hardening guidelines). Přidány ADR-0011 a ADR-0012 do related_docs.

1.0.12026-04-09claude-sonnet-4-6

Opravena terminologie: 'DinD source detection' nahrazeno přesným popisem — kontejner přistupuje k hostitelskému Docker daemonu přes socket mount, nikoli skutečný Docker-in-Docker s vlastním daemonem.

1.0.02026-04-09david.sorf + claude-sonnet-4-6

Migrace z doc/ADR/ADR-0008-container-runtime-connectivity-and-ops-wrappers.md do DAK JSON formátu. Rozšířeno o alternativy A/B/C, kompletní seznam wrapper skriptů, security rationale pro docker.sock a follow-up items.