duffyduck b273098b50 Compose: Variablen mit Default aufloesen (${VAR:-default})
Viele docker-compose-Dateien (z. B. Graylog) setzen Images per
${IMAGE:-default}. Bisher wurde alles mit "$" uebersprungen, sodass genau
diese Images nicht gefunden wurden. Jetzt werden ${VAR:-default} und
${VAR-default} mit ihrem Standardwert aufgeloest; nur Variablen ohne
Default (${VAR}, ${VAR:?...}) bleiben uebersprungen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 10:59:01 +02:00
2026-02-13 08:31:56 +01:00
2026-02-25 02:52:36 +01:00
2026-02-13 08:31:56 +01:00

Docker Registry mit Benutzerverwaltung

Private Docker Registry mit Web-Oberflaeche zur Benutzerverwaltung, HTTPS via Caddy und SQLite als Datenbank.

Voraussetzungen

  • Docker und Docker Compose
  • Eine Domain die auf den Server zeigt (A-Record)
  • Port 80 und 443 frei

Einrichtung

1. .env Datei anpassen

nano .env

Folgende Werte setzen:

Variable Beschreibung
DOMAIN Deine Domain, z.B. registry.meinserver.de
ADMIN_USER Benutzername fuer die Web-Oberflaeche
ADMIN_PASSWORD Passwort fuer die Web-Oberflaeche
SECRET_KEY Zufaelliger Schluessel (siehe unten)

2. Secret Key generieren

./generate-secret.sh

Traegt automatisch einen zufaelligen Schluessel in die .env Datei ein.

3. Starten

docker compose up -d --build

Caddy holt sich automatisch ein Let's Encrypt HTTPS-Zertifikat fuer die konfigurierte Domain.

Benutzerverwaltung

Web-Oberflaeche oeffnen unter:

https://DEINE-DOMAIN/

Dort mit den Admin-Zugangsdaten aus der .env anmelden. Ueber die Oberflaeche kannst du:

  • Neue Registry-Benutzer anlegen
  • Passwoerter aendern
  • Benutzer loeschen

Images pushen und pullen

Anmelden

docker login registry.meinserver.de

Benutzername und Passwort eingeben (die in der Web-Oberflaeche angelegten Zugangsdaten).

Image taggen und pushen

# Lokales Image taggen
docker tag mein-image:latest registry.meinserver.de/mein-image:latest

# Image hochladen
docker push registry.meinserver.de/mein-image:latest

Image pullen

docker pull registry.meinserver.de/mein-image:latest

Image mit Build direkt pushen

docker build -t registry.meinserver.de/mein-app:1.0 .
docker push registry.meinserver.de/mein-app:1.0

Image aus anderer Registry holen (Web-Oberflaeche)

Im Tab Images der Web-Oberflaeche kann ein Image direkt aus einer anderen Registry (z. B. Docker Hub) in diese Registry kopiert werden ganz ohne lokalen Docker-Client:

  1. Quell-Image eintragen, z. B. nginx:latest, bitnami/redis:7 oder ghcr.io/owner/app:v1.
  2. Public Images (Normalfall) brauchen nichts weiter. Bei privaten Quell-Images passend ankreuzen:
    • Benutzername / Kennwort fuer Docker Hub (Access Token als Kennwort) und die meisten Registries.
    • Access Token fuer Registries mit direktem Bearer-Token.
  3. Auf Holen klicken. Das Image wird per skopeo inklusive aller Architekturen kopiert und erscheint anschliessend in der Liste der gespeicherten Images.

Ist ein Image mit dem gleichen Digest bereits vorhanden, wird es automatisch uebersprungen so wird ein Doppel-Upload vermieden, auch wenn der Tag (z. B. latest) nicht eindeutig ist.

Mehrere Images aus einer docker-compose holen

Im selben Tab kann der Inhalt einer docker-compose.yml in ein Textfeld eingefuegt oder eine Datei hochgeladen werden. Mit Alle Images holen werden alle image:-Eintraege der Services in die Registry kopiert. Variablen mit Standardwert (z. B. ${GRAYLOG_IMAGE:-graylog/graylog:7.1}) werden mit ihrem Standardwert aufgeloest. Eintraege mit Variablen ohne Standardwert (z. B. ${TAG}) oder die bereits auf diese Registry zeigen, werden uebersprungen.

Images loeschen und Speicher aufraeumen (Web-Oberflaeche)

Im Tab Images kann jeder Tag ueber das Muelltonnen-Symbol (mit Rueckfrage) geloescht werden. Der Tag verschwindet sofort, der belegte Speicherplatz wird aber erst durch die Garbage Collection freigegeben:

  • Button Speicher aufraeumen (Garbage Collection) entfernt alle Daten, die von keinem Image mehr referenziert werden (laeuft direkt ueber die registry-Binary, kein Docker-Socket noetig).
  • Wichtig: Waehrend der Aufraeumung keine Images hochladen frisch hochgeladene, noch nicht referenzierte Daten koennten sonst entfernt werden.

Nuetzliche Befehle

# Alle Images in der Registry auflisten
curl -u benutzer:passwort https://registry.meinserver.de/v2/_catalog

# Tags eines Images auflisten
curl -u benutzer:passwort https://registry.meinserver.de/v2/mein-image/tags/list

# Logs anzeigen
docker compose logs -f

# Stoppen
docker compose down

# Stoppen und alle Daten loeschen
docker compose down
rm -rf data/

Datenverzeichnisse

Alle Daten liegen lokal im ./data/ Ordner:

Pfad Inhalt
data/caddy/ TLS-Zertifikate (Let's Encrypt)
data/registry/ Gespeicherte Docker Images
data/auth/users.db SQLite Datenbank mit Benutzern
data/htpasswd/ Generierte htpasswd fuer die Registry

Backup

Fuer ein vollstaendiges Backup reicht es den data/ Ordner und die .env Datei zu sichern:

tar czf backup-$(date +%Y%m%d).tar.gz data/ .env
S
Description
No description provided
Readme 118 KiB
Languages
HTML 50.1%
Python 47.5%
Dockerfile 1.6%
Shell 0.8%