1a1b4500d6
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>
69 lines
1.9 KiB
YAML
69 lines
1.9 KiB
YAML
services:
|
|
caddy:
|
|
image: caddy:2-alpine
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
- "443:443/udp"
|
|
volumes:
|
|
- ./data/caddy/data:/data
|
|
- ./data/caddy/config:/config
|
|
entrypoint: ["sh", "-c"]
|
|
command:
|
|
- |
|
|
echo '${DOMAIN} {
|
|
handle /v2/* {
|
|
reverse_proxy registry:5000
|
|
}
|
|
handle {
|
|
reverse_proxy auth:5000
|
|
}
|
|
}' | caddy run --adapter caddyfile --config -
|
|
depends_on:
|
|
- registry
|
|
- auth
|
|
networks:
|
|
- registry_net
|
|
|
|
registry:
|
|
image: registry:2
|
|
restart: unless-stopped
|
|
environment:
|
|
REGISTRY_AUTH: htpasswd
|
|
REGISTRY_AUTH_HTPASSWD_REALM: Docker Registry
|
|
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
|
|
REGISTRY_STORAGE_DELETE_ENABLED: "true"
|
|
# Blob-Cache deaktivieren: Die Garbage Collection laeuft als separater
|
|
# Prozess auf dem gemounteten Speicher. Mit aktivem In-Memory-Cache wuerde
|
|
# die laufende Registry geloeschte Blobs faelschlich fuer vorhanden halten
|
|
# und beim erneuten Pull keine Layer-Verknuepfung anlegen (Image fehlt dann
|
|
# im Katalog / "manifest unknown"). Ohne Cache ist die Live-GC sicher.
|
|
REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR: ""
|
|
volumes:
|
|
- ./data/registry:/var/lib/registry
|
|
- ./data/htpasswd:/auth:ro
|
|
networks:
|
|
- registry_net
|
|
|
|
auth:
|
|
build: ./auth-app
|
|
restart: unless-stopped
|
|
environment:
|
|
ADMIN_USER: ${ADMIN_USER}
|
|
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
|
|
SECRET_KEY: ${SECRET_KEY}
|
|
DB_PATH: /data/users.db
|
|
HTPASSWD_PATH: /auth/htpasswd
|
|
GC_CONFIG: /app/registry-gc-config.yml
|
|
volumes:
|
|
- ./data/auth:/data
|
|
- ./data/htpasswd:/auth
|
|
# Registry-Speicher fuer die Garbage Collection (gleicher Pfad wie im registry-Container)
|
|
- ./data/registry:/var/lib/registry
|
|
networks:
|
|
- registry_net
|
|
|
|
networks:
|
|
registry_net:
|