#!/usr/bin/env bash set -euo pipefail cd /opt/hx-ki/com2-stack F="docker-compose.yml" NET="hxki-internal" [ -f "$F" ] || { echo "FEHLT: $PWD/$F"; exit 1; } echo "=== COM2: FIX NETWORK (hxki-internal external) ===" # 1) Docker-Netzwerk auf Host sicherstellen if ! docker network ls --format '{{.Name}}' | grep -q "^${NET}$"; then echo "[1] Erzeuge Docker-Netzwerk: ${NET}" docker network create "${NET}" >/dev/null else echo "[1] OK: Docker-Netzwerk existiert: ${NET}" fi # 2) Compose patchen: networks: hxki-internal: external: true python3 - <<'PY' from pathlib import Path import re p = Path("/opt/hx-ki/com2-stack/docker-compose.yml") s = p.read_text() net = "hxki-internal" def ensure_network_block(txt: str) -> str: # Wenn schon networks: existiert -> sicherstellen, dass hxki-internal drin ist + external:true if re.search(r'(?m)^\s*networks:\s*$', txt): # hat bereits hxki-internal block? if re.search(r'(?m)^\s{2}' + re.escape(net) + r'\s*:\s*$', txt): # ensure external: true darunter # falls external fehlt, einfügen direkt nach net-block header def repl(m): block = m.group(0) if re.search(r'(?m)^\s{4}external:\s*true\s*$', block): return block # external: true nach header einfügen return block + " external: true\n" txt = re.sub( r'(?ms)^\s{2}' + re.escape(net) + r'\s*:\s*\n(?:^\s{4}.*\n)*', repl, txt ) else: # networks existiert, aber hxki-internal fehlt -> am Ende der networks-sektion einfügen # wir hängen es direkt nach "networks:" an, falls keine weiteren networks existieren, # ansonsten ans Ende der networks-liste (deterministisch: nach networks:-Header) txt = re.sub(r'(?m)^(networks:\s*)$', r'\1\n ' + net + ':\n external: true', txt, count=1) return txt # Wenn networks fehlt -> ans Ende anhängen return txt.rstrip() + f"\n\nnetworks:\n {net}:\n external: true\n" s2 = ensure_network_block(s) # Minimaler sanity cleanup: doppelte Leerzeilen nicht eskalieren s2 = re.sub(r'\n{4,}', '\n\n\n', s2) p.write_text(s2) print("OK: networks/hxki-internal als external:true gesetzt.") PY echo "[3] VALIDATE" docker compose config >/dev/null echo "OK: Compose ist valide." echo "[4] UP" docker compose up -d --remove-orphans echo "=== STATUS ===" docker ps --format 'NAME={{.Names}} STATUS={{.Status}} PORTS={{.Ports}}' echo "=== HXKI-INTERNAL ===" docker network inspect "${NET}" --format '{{range $id,$c := .Containers}}{{println $c.Name}}{{end}}' | sort echo "=== ENDE ==="