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 ausopenssl 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 mittimedatectl list-timezonesodercat /etc/timezoneermitteln.
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:
Warte etwa 10 Sekunden und kontrolliere, ob der Container läuft:
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]
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:
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:
- Gehe in der Web-UI zu Restore.
- Wähle den Backup-Job aus.
- Klicke Test without restoring – Duplicati listet die gesicherten Dateien auf.
- 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]
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:
- Web-UI erreichbar:
curl -s -o /dev/null -w "%{http_code}" http://localhost:8200→200 - Container läuft:
docker ps --filter name=duplicati --format "{{.Names}} {{.Status}}"→duplicati Up ... - Backup erfolgreich: In der UI unter Jobs grüner Haken, oder
docker logs duplicati 2>&1 | grep "Backup completed" - Wiederherstellung testbar: UI → Restore → Test without restoring → Dateiliste wird angezeigt
- AES-256 aktiv: Im Job-Editor unter Encryption prüfen, ob eine Passphrase gesetzt ist
- Keine Fehler im Log:
docker logs duplicati 2>&1 | grep -ci errorsollte0sein
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)