#!/usr/bin/env bash set -euo pipefail C="hxki-n8n" DEST="/home/node/.n8n" echo "=== HXKI FIX n8n PERMS ===" # Container muss existieren (auch wenn er crasht) docker inspect "$C" >/dev/null 2>&1 || { echo "FEHLT: Container $C"; exit 1; } # Mount-Quelle für /home/node/.n8n bestimmen SRC="$(docker inspect "$C" --format '{{range .Mounts}}{{if eq .Destination "'"$DEST"'"}}{{println .Source}}{{end}}{{end}}' | head -n1)" [[ -n "${SRC:-}" ]] || { echo "FEHLT: Kein Mount auf $DEST gefunden."; exit 1; } echo "Mount: $SRC -> $DEST" # Image bestimmen (für UID/GID, falls Container nicht exec-fähig ist) IMG="$(docker inspect "$C" --format '{{.Config.Image}}')" echo "Image: $IMG" # UID/GID aus dem Image holen (funktioniert auch wenn Container restartet) N8N_UID="$(docker run --rm --entrypoint sh "$IMG" -lc 'id -u node 2>/dev/null || id -u' )" N8N_GID="$(docker run --rm --entrypoint sh "$IMG" -lc 'id -g node 2>/dev/null || id -g' )" echo "Ziel-Owner: $N8N_UID:$N8N_GID" # Container stoppen (damit keine Writes während chown) echo "Stoppe $C..." docker stop "$C" >/dev/null 2>&1 || true # Rechte setzen echo "Setze Owner/Rechte auf Host-Pfad: $SRC" chown -R "$N8N_UID:$N8N_GID" "$SRC" chmod -R u+rwX,g+rwX "$SRC" # Container starten echo "Starte $C..." docker start "$C" >/dev/null 2>&1 || true echo "Status:" docker ps --format 'NAME={{.Names}} STATUS={{.Status}}' | grep "$C" || true echo "Letzte Logs:" docker logs --tail=30 "$C" || true echo "=== ENDE ==="