Files
docker-repo/docker-compose.yml
T
duffyduck 1a1b4500d6 Korrupte/verwaiste Repos sichtbar machen + Live-GC sicher
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>
2026-06-09 13:06:18 +02:00

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: