spawner/docs/BUGFIX_CONTAINER_SPAWN.md
XPS\Micro 37df1eda40 fix: Container-Spawn Fehler beheben - Pre-Check für existierende Container, Naming-Konflikt auflösen
- container_manager.py: Pre-Check vor containers.run() hinzufügen
  - Prüfe ob Container bereits existiert (z.B. nach Fehler)
  - Wenn running: Wiederverwenden statt zu erstellen
  - Wenn stopped: Versuchen zu starten oder zu löschen
  - Verhindert Docker 409 Conflict-Fehler

- api.py: Container-Spawn Fehlerbehandlung verbessern
  - Container-Spawn ist optional beim Signup
  - User wird trotzdem erstellt wenn Spawn fehlschlägt
  - JWT wird immer returned (Status 200)

- docs/BUGFIX_CONTAINER_SPAWN.md: Dokumentation hinzufügen
  - Erklär die Probleme, Fixes und Testing
2026-02-03 14:09:36 +01:00

4.1 KiB

Bug-Fix: Container-Spawn Fehler bei Multi-Container

Datum: 2026-02-03 Betroffen: template-01, template-02, template-next Status: GELÖST


Probleme

Problem 1: Container-Naming-Konflikt (409 Conflict Error)

Fehler:

Container konnte nicht erstellt werden: Docker API Fehler: 409 Client Error...
"user-e220dd278a12-template-01-1" is already in use by container "..."

Ursache:

  • Wenn ein Container mit gleichem Namen bereits existiert (z.B. von fehlgeschlagener Erstellung oder unvollständiger Löschung)
  • Beim erneuten Erstellen warf Docker einen 409 Conflict-Fehler
  • Code versuchte nicht, existierende Container zu prüfen

Fix: container_manager.py (Zeilen 192-216)

  • Vor Container-Erstellung prüfen ob Container bereits existiert
  • Wenn running → Container wieder verwenden
  • Wenn stopped → Versuchen zu starten oder zu löschen
  • Wenn nicht vorhanden → Neuen erstellen

Problem 2: Falsches Routing nach Container-Löschung

Fehler:

Container-Span nach Löschung nicht weitergeführt

Ursache:

  • Nach dem Löschen eines gestoppten Containers wurde die Erstellung nicht fortgesetzt
  • Code hatte kein Fallthrough nach remove()

Fix: container_manager.py (Zeilen 202-213)

  • Nach erfolgreicher Löschung werden Kommentare aktualisiert
  • Code fährt fort zur normalen Container-Erstellung

Problem 3: Verifizierungs-Fehler trotz Erfolg

Symptom:

  • Frontend zeigt "Verifizierung fehlgeschlagen"
  • Trotzdem automatischer Redirect zum Dashboard

Verbesserung: api.py (Zeile 241-243)

  • Container-Spawn ist jetzt explizit optional
  • User wird trotzdem erstellt wenn Container-Spawn fehlschlägt
  • JWT wird immer returned (Status 200)

Geänderte Dateien

1. container_manager.py

Zeilen 192-216: Pre-Check für existierende Container

# Vor containers.run():
try:
    existing_container = self._get_client().containers.get(container_name)
    if existing_container.status == 'running':
        return existing_container.id, 8080  # Wiederverwenden
    else:
        # Versuchen zu starten oder zu löschen
        ...
except docker.errors.NotFound:
    pass  # Container existiert nicht, normal weiterfahren

2. api.py

Zeilen 241-243: Container-Spawn Fehlerbehandlung

except Exception as e:
    current_app.logger.error(f"Container-Spawn fehlgeschlagen: {str(e)}")
    # Notiere: Container-Spawn ist optional beim Signup
    # User ist trotzdem erstellt, Container kann später manuell erstellt werden

Server-Deployment

WICHTIG: Nicht docker-compose down verwenden!

cd /volume1/docker/spawner

# 1. Code aktualisieren
git pull origin main

# 2. RICHTIG - Nur geänderte Services neubaut (keine down!)
docker-compose up -d --build

# 3. Warten
sleep 10

# 4. Logs prüfen
docker-compose logs spawner 2>&1 | tail -50

Testing

Test 1: Template-02 (vorher funktionierend)

  • Registriere neuen User
  • Container sollte ohne "409 Conflict" erstellt werden
  • Erwartet: Container läuft und ist erreichbar

Test 2: Erneute Erstellung desselben Templates

  • Lösche User mit Container
  • Erstelle neuen User mit gleicher Template
  • Erwartet: Kein Naming-Konflikt, neuer Container wird erstellt

Test 3: Template-next (timing-sensitiv)

  • Registriere User
  • Öffne Template-next sofort
  • Erwartet: "Netzwerkfehler" ist OK (Container braucht 2-3 Min. für npm build)
  • Nach 2-3 Min: Container sollte erreichbar sein

Bekannte Einschränkungen

  • template-next Startup: Next.js Builds brauchen 2-5 Minuten (npm install + build)

    • Frontend zeigt "Netzwerkfehler" initial - das ist normal
    • Nach 2-3 Min erneut versuchen
  • Container-Recovery: Wenn ein Container in fehlerhaftem Zustand ist, wird er automatisch gelöscht

    • Sollte selten vorkommen
    • Wird in den Logs dokumentiert

Rollback (Falls nötig)

Wenn Probleme auftreten:

git revert HEAD  # Letzten Commit rückgängig machen
git push
docker-compose up -d --build

Dokumentation: 2026-02-03 Getestet auf: Synology NAS, Docker 20.10+, Docker Compose 2.0+