trading-system-docs/red-queen-architecture/control-plane/cp2a2_2b/docker-compose.yml

57 lines
2 KiB
YAML

# CP2A2.2B — L1 Red Queen Worker: docker-compose
# STRICTLY NON-AUTONOMOUS / NON-PRODUCTIVE. NO AUTONOMY. NO HEARTBEAT. NO SCHEDULER.
#
# Separate minimale L1 Worker Runtime. Der bestehende interaktive Container
# `hermes-red-queen` bleibt UNVERAENDERT (wird hier NICHT referenziert).
#
# HAERTUNG:
# - non-root hermes-User (UID 10010 / GID 10000, im Basis-Image definiert)
# - read-only rootfs
# - cap_drop ALL, no-new-privileges
# - kein Docker-Socket, keine Host-Root-Mounts, keine Host-Namespaces
# - eigenes internal-Netz (keine Egress, kein Internet)
# - KEINE Credentials in ENV (Credential Zero Policy)
#
# NETZWERK-MODELL:
# Der Worker haengt an einem eigenen internal-Netz `l1-internal`.
# Gate-Evaluator, Ollama und Tolaria werden per `docker network connect`
# zusaetzlich an dieses Netz angehaengt (nur Netzwerk-Attachment, KEINE
# Config/ENV/Credential-Aenderung an diesen Containern).
# Kein genereller Internet-Egress, kein Telegram/Notion/Forgejo-public.
#
# KEIN AUTOSTART-AUTONOMIE:
# Der Container startet inert (sleep infinity). Kein autonomer Tick, kein
# Heartbeat, kein Scheduler. Ein Tick wird ausschliesslich extern getriggert
# (spaetere Phase) und ist in CP2A2.2B verboten.
services:
l1-red-queen-worker:
build: .
image: l1-red-queen-worker:cp2a2_2b
container_name: l1-red-queen-worker
restart: unless-stopped
read_only: true
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
tmpfs:
- /tmp
volumes:
# Worker-eigenes persistentes State-Volume (worker-owned, UID 10010).
# Nur der Worker kann schreiben. Bestehende interaktive RQ darf dieses
# Volume NICHT schreiben (separate Security Domain).
- l1-worker-state:/opt/l1-worker/state
networks:
- l1-internal
environment: []
# KEINE Credentials. KEIN Docker-Socket. KEINE Host-Root-Mounts.
# KEIN Gateway, KEIN Telegram, KEIN API-Server, KEIN Cron.
networks:
l1-internal:
driver: bridge
internal: true
volumes:
l1-worker-state: