Zwei Probleme nach dem alten --delete-untagged-Schaden:
1) Repos mit Tags aber ohne _layers (verwaist) tauchen nicht im
Registry-Katalog auf -> waren in der Web-Oberflaeche unsichtbar und
nicht loeschbar. images() listet jetzt zusaetzlich direkt aus dem
Dateisystem (scan_fs_repositories/repo_tags), Vereinigung mit dem
Katalog. So sind auch korrupte Repos sichtbar und ueber den
Loeschen-Button entfernbar.
2) Die GC laeuft als separater Prozess auf dem gemounteten Speicher.
Der In-Memory-Blob-Cache der laufenden Registry hielt geloeschte
Blobs faelschlich fuer vorhanden -> erneuter Pull legte keine
_layers-Verknuepfung an (Image fehlte im Katalog). Cache via
REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR="" deaktiviert -> Live-GC sicher.
Verifiziert: korruptes Repo -> in Liste sichtbar -> Loeschen -> GC ->
erneut pushen -> Katalog korrekt und docker pull erfolgreich, ohne
Registry-Neustart.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Tab "Images" um Verwaltungsfunktionen erweitert:
- Einzel-Pull: Image aus anderer Registry (z. B. Docker Hub) per skopeo
in die eigene Registry kopieren, optional mit Benutzername/Kennwort
oder Access Token fuer private Quell-Registries
- Bulk-Pull: alle image-Eintraege einer docker-compose (Textfeld oder
Datei-Upload) auf einmal holen; Variablen/eigene Registry werden ignoriert
- Digest-Dedup: bereits mit gleichem Digest vorhandene Images werden
uebersprungen (kopiert mit --all, damit Multi-Arch-Digests matchen)
- Loeschen: Muelltonne hinter jedem Tag mit Rueckfrage
- Garbage Collection: gibt belegten Speicher frei, laeuft per registry-Binary
(Multi-Stage-Build) direkt auf dem gemounteten Speicher, kein Docker-Socket
gunicorn: 1 Worker (gemeinsames Service-Passwort) + 8 Threads, Timeout 1800s
fuer lange Kopiervorgaenge.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>