5.7 KiB
Bekannte Bugs und Limitationen
Aktuelle bekannte Probleme und moegliche Workarounds.
Inhaltsverzeichnis
Bekannte Limitationen
Container Auto-Shutdown nicht implementiert
Status: Geplant fuer v0.2.0
Beschreibung: Die Variable CONTAINER_IDLE_TIMEOUT ist definiert, aber die Logik zum automatischen Stoppen inaktiver Container fehlt noch.
Auswirkung: Container laufen unbegrenzt weiter, auch bei Inaktivitaet.
Workaround: Manuelles Aufraumen mit Cron-Job:
# cleanup-idle.sh
#!/bin/bash
# Container die aelter als 24h sind und keinen Traffic haben
docker ps --filter 'label=spawner.managed=true' \
--format '{{.ID}} {{.RunningFor}}' | \
grep -E 'days|weeks' | \
awk '{print $1}' | \
xargs -r docker stop
Keine Volume-Persistenz
Status: Geplant fuer v0.2.0
Beschreibung: User-Daten in Containern gehen bei Neustart verloren.
Auswirkung: Alle Dateien die ein User im Container erstellt werden bei Restart geloescht.
Workaround: Volume-Mounts manuell in container_manager.py hinzufuegen:
# In spawn_container()
volumes = {
f'/data/users/{username}': {
'bind': '/app/data',
'mode': 'rw'
}
}
Kein Multi-Template-Support
Status: Geplant fuer v1.0.0
Beschreibung: Alle User erhalten das gleiche Container-Template.
Auswirkung: Keine Moeglichkeit verschiedene Umgebungen anzubieten (z.B. Python, Node.js).
Workaround: Mehrere Spawner-Instanzen mit unterschiedlichen USER_TEMPLATE_IMAGE Werten.
Minimale Input-Validierung
Status: Bekannt
Beschreibung: Username und Email werden nur minimal validiert.
Auswirkung: Potenzielle Injection-Risiken bei speziellen Zeichen.
Workaround: Siehe Sicherheits-Dokumentation
Kein Rate-Limiting
Status: Geplant fuer v1.0.0
Beschreibung: Keine Begrenzung von Login-Versuchen oder API-Aufrufen.
Auswirkung: Anfaellig fuer Brute-Force-Angriffe.
Workaround: Rate-Limiting via Traefik:
# In docker-compose.yml Labels
labels:
- "traefik.http.middlewares.ratelimit.ratelimit.average=10"
- "traefik.http.middlewares.ratelimit.ratelimit.burst=20"
- "traefik.http.routers.spawner.middlewares=ratelimit"
Kein Admin-Dashboard
Status: Geplant fuer v0.2.0
Beschreibung: Keine Web-UI zum Verwalten von Usern und Containern.
Workaround: Direkte Datenbank-/Docker-Befehle:
# User auflisten
docker exec spawner sqlite3 /app/data/users.db "SELECT id, username, email FROM user"
# Container auflisten
docker ps --filter 'label=spawner.managed=true'
# Container eines Users stoppen
docker stop user-<username>-<id>
Bekannte Bugs
BUG-001: Health-Check schlaegt bei erstem Start fehl
Schweregrad: Niedrig
Beschreibung: Der Health-Check kann beim allerersten Start fehlschlagen, bevor die Datenbank initialisiert ist.
Schritte zum Reproduzieren:
- Frische Installation ohne existierende DB
docker-compose up -d- Sofortiger Health-Check:
curl http://localhost:5000/health
Erwartetes Verhalten: 200 OK
Tatsaechliches Verhalten: 503 oder Connection Refused
Workaround: 5-10 Sekunden warten nach Start.
Status: Akzeptiert (normales Verhalten bei Kaltstart)
BUG-002: Container-Neustart loescht Container-ID nicht bei Fehler
Schweregrad: Mittel
Beschreibung: Wenn ein Container-Spawn fehlschlaegt, bleibt die alte Container-ID im User-Record.
Schritte zum Reproduzieren:
- User hat laufenden Container
- Admin loescht Container manuell:
docker rm -f user-xxx - User klickt "Neustart" im Dashboard
- Spawn schlaegt fehl (z.B. Image nicht gefunden)
- Container-ID zeigt auf nicht-existierenden Container
Workaround: Container-ID manuell zuruecksetzen:
docker exec spawner sqlite3 /app/data/users.db \
"UPDATE user SET container_id=NULL WHERE username='<username>'"
Status: Fix geplant
Workarounds
Alle User-Container auflisten
docker ps --filter 'label=spawner.managed=true' \
--format 'table {{.Names}}\t{{.Status}}\t{{.RunningFor}}'
Container-Ressourcen pruefen
docker stats --filter 'label=spawner.managed=true' --no-stream
Verwaiste Container aufraumen
# Container ohne zugehoerigen User finden
for container in $(docker ps -q --filter 'label=spawner.managed=true'); do
username=$(docker inspect $container --format '{{index .Config.Labels "spawner.username"}}')
exists=$(docker exec spawner sqlite3 /app/data/users.db \
"SELECT COUNT(*) FROM user WHERE username='$username'")
if [ "$exists" = "0" ]; then
echo "Verwaist: $container ($username)"
# docker rm -f $container # Zum Loeschen auskommentieren
fi
done
Datenbank-Backup manuell erstellen
docker exec spawner sqlite3 /app/data/users.db ".backup '/app/data/backup-$(date +%Y%m%d).db'"
docker cp spawner:/app/data/backup-*.db ./backups/
Issue Tracker
Neue Bugs oder Feature-Requests bitte hier melden:
Repository Issues: https://gitea.iotxs.de/RainerWieland/spawner/issues
Issue erstellen - Vorlage
## Beschreibung
[Kurze Beschreibung des Problems]
## Schritte zum Reproduzieren
1. [Erster Schritt]
2. [Zweiter Schritt]
3. [...]
## Erwartetes Verhalten
[Was sollte passieren]
## Tatsaechliches Verhalten
[Was passiert stattdessen]
## Umgebung
- Spawner Version: [z.B. 0.1.0]
- Docker Version: [z.B. 24.0.5]
- OS: [z.B. Ubuntu 22.04]
## Logs
\`\`\`
[Relevante Log-Ausgaben]
\`\`\`
Zurueck zur Dokumentations-Uebersicht