Zum Inhalt

Duplicati per Docker installieren: Verschlüsselte Backups mit Browser-UI für Docker-Volumes und Ordner

Veröffentlicht am 27. September 2026 · Geschätzte Lesezeit: 7 Minuten

Duplicati ist ein freier, quelloffener Backup-Client, der Verzeichnisse und Docker-Volumes automatisiert, verschlüsselt (AES-256) und dedupliziert sichert – auf lokale Pfade, NAS-Freigaben (SMB/NFS), SFTP, WebDAV oder S3-kompatible Cloud-Ziele (Backblaze B2, Wasabi, MinIO).[1] Die enthaltene Browser-Oberfläche führt dich durch Einrichtung, Zeitplanung und Wiederherstellung, ohne dass du die Kommandozeile bemühen musst. Diese Anleitung installiert Duplicati als Docker-Container und richtet den ersten Backup-Job ein. Plane etwa 25 Minuten ein.

Voraussetzungen

  • Ein Linux-Server mit Docker und Docker Compose (oder der docker compose-Plugin-Version)
  • Terminalzugriff und ein Benutzer mit sudo-Rechten
  • Ausgehender Internetzugriff zu Docker Hub
  • Die zu sichernden Verzeichnisse müssen dem Container per Volume-Mount zugänglich gemacht werden
  • Ein aktuelles Backup deiner wichtigen Daten zur Sicherheit

1. Projektordner anlegen

Lege einen eigenen Ordner für Duplicati an:

sudo mkdir -p /opt/duplicati/config /opt/duplicati/backups
sudo chown -R "$USER":"$USER" /opt/duplicati
cd /opt/duplicati
  • /opt/duplicati/config – hier speichert Duplicati seine Konfigurationsdatenbank und Einstellungen.
  • /opt/duplicati/backups – optionales lokales Ziel für Backup-Dateien (wenn du nicht auf ein NAS oder eine Cloud sichern möchtest).

2. Compose-Datei erstellen

Erstelle /opt/duplicati/compose.yaml:

services:
  duplicati:
    image: duplicati/duplicati:latest
    container_name: duplicati
    restart: unless-stopped
    ports:
      - "8200:8200"
    volumes:
      - ./config:/data
      - ./backups:/backups
      - /var/lib/docker/volumes:/source/volumes:ro
      - /opt:/source/opt:ro
    environment:
      - TZ=Europe/Berlin
      - SETTINGS_ENCRYPTION_KEY=<dein-sicherer-schluessel>
      - DUPLICATI__WEBSERVICE_PASSWORD=<dein-ui-passwort>

Ersetze die Platzhalter <dein-sicherer-schluessel> und <dein-ui-passwort> vor dem Start:

  • <dein-sicherer-schluessel> – ein langer, zufälliger Schlüssel (z. B. 64 Zeichen aus openssl rand -hex 32). Er verschlüsselt die Konfigurationsdatenbank. Ohne diesen Schlüssel sind die gespeicherten Einstellungen (inkl. Backup-Ziel-Konfiguration) nicht lesbar.[1]
  • <dein-ui-passwort> – ein sicheres Passwort für den ersten Login in der Weboberfläche. Duplicati generiert beim ersten Start sonst ein zufälliges einmaliges Passwort, das du nur über einen speziellen Link in den Logs nutzen kannst.[2]
  • Europe/Berlin – deine Zeitzone. Liste mit timedatectl list-timezones oder cat /etc/timezone ermitteln.

Volume-Mounts erklärt:

  • ./config:/data – Konfiguration bleibt nach Container-Neustart erhalten.[2]
  • ./backups:/backups – Optionale lokale Backup-Zielebene.
  • /var/lib/docker/volumes:/source/volumes:ro – Docker-Volumes (z. B. von PostgreSQL, Nextcloud) lesend bereitstellen.
  • /opt:/source/opt:ro – Deine Docker-Compose-Ordner (typischerweise unter /opt/) lesend bereitstellen.

Docker-Volumes richtig sichern

Nur Verzeichnisse, die du per volumes: einbindest, sind im Container sichtbar. Pfade unter /var/lib/docker sind ohne Mount leer. Binde jeden Quellpfad explizit ein.[1]

3. Container starten

Prüfe die Konfiguration und starte den Dienst:

docker compose config --quiet && echo "OK"
docker compose up -d

Warte etwa 10 Sekunden und kontrolliere, ob der Container läuft:

docker ps --filter name=duplicati --format "{{.Names}} {{.Status}}"

4. Weboberfläche öffnen und anmelden

Rufe im Browser http://DEINE_SERVER_IP:8200 auf (ersetze DEINE_SERVER_IP durch die IP deines Servers, z. B. 192.168.1.100).

Erstanmeldung: Duplicati generiert beim ersten Start ein zufälliges Einmal-Passwort. Wenn du DUPLICATI__WEBSERVICE_PASSWORD nicht gesetzt hast, findest du den einmaligen Login-Link in den Container-Logs:[2]

docker logs duplicati 2>&1 | grep "signin\|http://localhost:8200"

Suche nach einer Zeile mit signin link. Öffne diesen Link (ersetzte ggf. localhost durch die Server-IP). Nach dem ersten Login kannst du in den Einstellungen ein dauerhaftes Passwort setzen. Hast du die Umgebungsvariable gesetzt, meldest du dich direkt damit an.

5. Ersten Backup-Job erstellen

Nach dem Login klickst du in der Web-UI auf Add backup → Configure a new backup und durchläufst den Assistenten:

a) Name und Ziel (General): - Name: z. B. Docker-Volumes taeglich - Encryption: AES-256 encryption (empfohlen!). Wähle eine sichere Passphrase und notiere sie an einem separaten, sicheren Ort – ohne sie sind die gesicherten Daten unwiederbringlich verloren. - Destination: Wähle dein Ziel aus (lokaler Pfad im Container, z. B. /backups, oder ein SMB-Netzwerklaufwerk, SFTP, S3-kompatibel).

b) Datenquelle (Source Data): - Gib den Pfad innerhalb des Containers an, z. B. /source/volumes für alle Docker-Volumes.

c) Zeitplan (Schedule): - Wähle z. B. Daily um 03:00 Uhr.

d) Abschluss (Save): - Der Job erscheint im Dashboard. Starte ihn einmalig mit dem grünen Play-Button, um zu prüfen, ob alles funktioniert.

6. Backup prüfen

Kontrolliere den Job-Status in der UI (grüner Haken unter Jobs) oder im Log:

docker logs duplicati 2>&1 | grep -i "backup completed\|error"

Ein erfolgreicher Durchlauf zeigt eine Zeile wie Backup completed. Fehlerhafte Konfigurationen (falscher Pfad, fehlende Berechtigung) erscheinen als Error.[4]

7. Wiederherstellung testen

Ohne einen erfolgreichen Restore-Test ist dein Backup kein Backup. So prüfst du die Wiederherstellung:

  1. Gehe in der Web-UI zu Restore.
  2. Wähle den Backup-Job aus.
  3. Klicke Test without restoring – Duplicati listet die gesicherten Dateien auf.
  4. Für einen echten Test: Wähle Restore to folder und gib ein leeres Testverzeichnis an, z. B. /backups/restore-test.

8. Backup-Konfiguration sichern

Die gesamte Konfiguration (Datenbank, Jobs, Einstellungen) liegt im gemounteten ./config-Ordner. Diesen solltest du regelmäßig separat sichern. Ein direkter Export aus der UI ist ebenfalls möglich unter Settings → Export configuration.[1]

Sicherheitshalber: Notiere den SETTINGS_ENCRYPTION_KEY und die AES-256-Passphrase physisch (z. B. auf Papier im Tresor). Ohne den SETTINGS_ENCRYPTION_KEY kannst du den Container nicht mit alter Konfiguration neu starten. Ohne die AES-Passphrase sind alle gesicherten Daten verloren.

9. Typische Fehler vermeiden

Volumes nicht gemountet

Duplicati sieht nur Pfade, die du per volumes: im Compose-File eingebunden hast. Ein Pfad wie /var/lib/docker ohne expliziten Mount ist im Container leer.

Berechtigungsproblem

Docker-Volumes gehören oft root. Das offizielle Duplicati-Image läuft als root und liest sie problemlos. Nutzt du das linuxserver-Image, musst du PUID=0 und PGID=0 setzen, damit Root-Dateien lesbar sind.

Datenordner-Berechtigungen (ab Duplicati 2.3.1.0)

Duplicati prüft ab Version 2.3.1.0 die Berechtigungen des Datenordners. Bei Kompatibilitätsproblemen setze:[1]

environment:
  - DUPLICATI__ALLOW_INSECURE_DATAFOLDER=true

Laufende Datenbanken sichern

Die Volume-Dateien einer PostgreSQL- oder MySQL-Datenbank sind während des Betriebs nicht konsistent lesbar. Verwende stattdessen einen Pre-Backup-Dump des Datenbank-Tools (pg_dump, mysqldump) und sichere die Dump-Datei. Duplicati kann eigene Pre/Post-Skripte pro Job ausführen (unter Advanced Options → Pre/Post-command).

DB-Encryption im Docker-Modus

Duplicati startet im Docker-Container standardmäßig mit DUPLICATI__DISABLE_DB_ENCRYPTION=true.[2] Das ist beabsichtigt, weil die Konfiguration auf dem Host liegt und dort verschlüsselt sein sollte (z. B. per LUKS). Aktivierst du die DB-Encryption, hängt der Schlüssel an der Maschinen-Seriennummer – beim Container-Umzug auf einen anderen Host wird die Datenbank dann unlesbar.

10. Backup-Job-Ziele und Verschlüsselung

Duplicati unterstützt zahlreiche Ziele:[3]

Zieltyp Beispiel-URL / Pfad
Lokaler Ordner /backups
SMB/CIFS-Freigabe smb://nas/backups
SFTP sftp://user@host:22/path
WebDAV webdav://server/path
S3-kompatibel (MinIO, Backblaze B2, Wasabi) s3://bucket + Zugangsschlüssel
OneDrive / Google Drive Nach Anmeldung im Browser

AES-256-Verschlüsselung: Wähle im Job-Assistenten unter Encryption die Option AES-256 encryption und vergib eine starke Passphrase. Der Schlüssel wird niemals an den Speicherort übertragen – ohne die Passphrase kann niemand (auch nicht der Cloud-Anbieter) deine Daten lesen. Die Deduplizierung und Komprimierung arbeiten trotz Verschlüsselung normal weiter.

Sicherheitshinweise

  • Passphrase-Verlust = Datenverlust: Es gibt keine Hintertür oder Passwort-Wiederherstellung. Notiere die AES-Passphrase physisch an einem zweiten sicheren Ort.
  • SETTINGS_ENCRYPTION_KEY: Dieser Schlüssel schützt die Konfigurationsdatenbank. Einmal vergeben und in Betrieb, darf er nicht mehr geändert werden.
  • Netzwerkzugriff: Die Weboberfläche auf Port 8200 sollte nicht ohne Authentifizierung aus dem Internet erreichbar sein. Setze einen Reverse Proxy (Traefik, Caddy, Nginx) mit HTTPS und ggf. vorgeschalteter Authentifizierung ein.
  • Kein Backup auf dieselbe Platte: Das Backup-Ziel muss auf einem anderen Laufwerk oder System liegen. Lokale Backups im ./backups-Ordner sind nur eine erste Stufe – die 3-2-1-Regel (drei Kopien, zwei Medien, eine außer Haus) gilt auch hier.

Fertig

Duplicati läuft und dein erster Backup-Job ist konfiguriert. Führe diese Prüfungen durch:

  1. Web-UI erreichbar: curl -s -o /dev/null -w "%{http_code}" http://localhost:8200 → 200
  2. Container läuft: docker ps --filter name=duplicati --format "{{.Names}} {{.Status}}" → duplicati Up ...
  3. Backup erfolgreich: In der UI unter Jobs grüner Haken, oder docker logs duplicati 2>&1 | grep "Backup completed"
  4. Wiederherstellung testbar: UI → Restore → Test without restoring → Dateiliste wird angezeigt
  5. AES-256 aktiv: Im Job-Editor unter Encryption prüfen, ob eine Passphrase gesetzt ist
  6. Keine Fehler im Log: docker logs duplicati 2>&1 | grep -ci error sollte 0 sein

Sources

[1] https://docs.duplicati.com/platform-specific-guides/using-duplicati-from-docker — Using Duplicati from Docker (official) [2] https://hub.docker.com/r/duplicati/duplicati — Duplicati Docker Hub Image [3] https://docs.duplicati.com/getting-started/installation — Duplicati Installation Guide [4] https://github.com/duplicati/duplicati — Duplicati GitHub Repository [5] https://deployn.de/en/blog/backups-duplicati — Backups with Duplicati & Docker (deployn.de)