[TUT] Docker Container sichern und wiederherstellen

  • Alle Bilder des Turorials stammen aus meiner Testumgebung, Ausschnitte meines Codes können der Webseite github.com/Red5d/docker-autocompose entnommen werden.
    Yes

    Liebe Community,

    da diese Frage immer wieder auftaucht, zeige ich Euch in diesem Tutorial, wie Ihr auf eine einfache Art und Weise Eure Docker-Container sichern und wiederherstellen könnt.

    Anleitung Sicherung:

    1. Sofern noch nicht erfolgt, muss auf dem NAS wie folgt SSH aktiviert werden.
      • Systemsteuerung > Terminal > SSH aktivieren (Haken setzen)

    image

    1. Terminal öffnen und per ssh anmelden.
    2. Mit nachfolgenden Befehlen wird das erforderliche Image "Autocompose" installiert:
      • sudo -i
      • docker pull ghcr.io/red5d/docker-autocompose:latest
    3. Docker-Compose (YML) eines laufenden Docker-Containers erzeugen, der Teil <container-name-or-id> muss durch den jeweiligen Namen des zu sichernden Containers ersetzt werden:
      • docker run --rm -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/red5d/docker-autocompose <container-name-or-id>

    Beispielausgabe meines Containers "Uptimekuma" im Terminal:

    1. Markieren und kopieren der Ausgabe im Terminal.
    2. Einfügen der Ausgabe in ein Textfile und dieses unter "Containername.yml" an einem sicheren Ort speichern.
    3. Sofern die Sicherung der persistenten Daten Eurer Docker-Container nicht ohnehin schon automatisiert per RSYNC o.ä. erfolgt, müssen diese noch manuell gesichert werden. Hierzu den einfach den jeweiligen Ordner des Docker-Containers an ein einem sicheren Ort kopieren. Tipp: Am Besten speichert ihr die Datei aus Schritt 6 (Containername.yml) zusammen mit dem Ordner am selben Ort, um diese später leicht wiederzufinden.
      • Dateimanager > Freigegebener Ordner > Docker > Ordner des Docker-Containers

    image

    1. FERTIG.

    Anleitung Wiederherstellung:
    Hinweis - Diese Anleitung basiert auf Basis der Verwendung von Portainer!

    1. Den Ordner des rückzusichernden Docker-Containers (Schritt 7 aus der "Anleitung Sicherung") an den Ursprungsort zurück kopieren.
      • Dateimanager > Freigegebener Ordner > Docker

    image

    1. Portainer öffnen und anmelden
    2. Auf Live Connect klicken

    image

    1. Anschließend im linken Menü auf "Stacks" und dann auf "Add Stack" klicken

    image

    1. Im Feld "Name" Den Namen des rückzusichernden Containers eingeben
    2. Die Datei "Containername.yml" (Schritt 6 aus der "Anleitung Sicherung") mit einem Texteditor öffnen, den gesamten Inhalt markieren/kopieren und in Portainer in das Feld "Web Editor" einfügen.
      • Hinweis: Wird derContainer auf einem anderen System bzw. anderem Volume rückgesichert, so muss das Volume-Mapping im kopierten Code natürlich entsprechend korrigiert werden!

    image

    1. Anschließend unter "Actions" auf "Deploy the Stack" klicken.

    image

    1. Der Docker-Container wird nun installiert und sollte nach Fertigstellung alle Einstellungen und persistenten Daten (zum Zeitpunkt der Sicherung des Container-Ordners) beinhalten.
    2. FERTIG

    Allgemeiner Hinweis:
    Nach der Installation von Autocompose (Schritt 3 aus der "Anleitung Sicherung"), ist in Portainer unter Images das entsprechende Image mit "Unused" deklariert. Dies ist normal, da dieses von keinem Docker-Container verwendet, sondern lediglich für die Exporte von Docker-Compose genutzt wird. Wird dieses Image gelöscht, können die beschriebenen Schritte ohne Neuinstallation nicht mehr durchgeführt werden.

    image

    Viel Spass beim Sichern/Rücksichern!

  • Werden hier der Container mit den Daten gesichert oder nur der Container?

    Im Beispiel Paperless die gesamter Docker Paperless Konfiguration inkl. aller meiner Dokumente?

  • Cedrik1

    Wenn du obenstehende Schritt-für-Schritt Anleitung aufmerksam betrachtest, dann siehst du, dass du die persistenten Daten manuell kopieren musst ;). "Autocompose" erzeugt lediglich die YAML-Ausgabe eines laufenden Containers, welche du im Worst-Case für eine Wiederherstellung verwenden kannst.

    VG Willi

  • Okay schade das es da von Paperless/Docker noch keine "echte Backup" Lösung gibt, sondern immer nur halbe.

    Trotzdem Danke für die Anleitung

  • Okay schade das es da von Paperless/Docker noch keine "echte Backup" Lösung gibt, sondern immer nur halbe.

    Speziell für Paperless-NGX wäre das ev. ein Input für dich: So sicherst du Paperless-ngx
    Backups/Sicherungen sind aber generell immer mit etwas Aufwand verbunden ;).

  • columbo1979
    Die Sicherung von Paperless NGX ist sehr speziell, shau dir diesbezüglich mal den Link in Beitrag #5 an.
    Den Ordner musst du aber sowieso AUCH wegsichern, weil darin die persistenten Daten des Containers gespeichert sind.

  • Reicht es auch, wenn ich die Backup Funktion von Portainer nutze für die Wiederherstellung der .yml-Einstellungen oder macht diese Backupfunktion etwas anderes ?
    Im Restore würde ich dann zunächst die alte Ordnerstrukture durch manuelles copy&paste (inkl. Daten) wiederherstellen und anschließen via portainer das portainer-backup wiederherstellen. Würde dies auch funktionieren ?

  • Hallo Halvid

    Sofern alle deine Container als vollwertige Stacks in Portainer vorliegen, geht das. Soweit ich weiß, ist in diesem Backup aber nicht alles enthalten, beispielsweise werden ENV Variablen, welche via *.env Datei eingelesen wurden, nicht gesichert.

  • Ergänzend:
    Irgendjemand aus dem Synology-Forum hatte sich mal folgendes Script für seine Container-Backups gebastelt:

    Ugreen NAS DPX4800Plus, UGOS 1.14.1.0107, 2x Samsung 990 EVO Plus NVMe M.2 SSD 2 TB Raid1, 3*Toshiba MG10ACA20TE HDD 20TB Raid5, 64GB RAM -> 2 x Crucial DDR5 RAM 32GB 4800MHz SODIMM
    DS1522+ | DSM 7.3.2-86009U3 (Final) | 40 GB RAM | 3 x WD 14TB WD140EFGX Red Plus SHR, 2 x M.2-Samsung 980 Pro SSD 1TB SHR
    DS415+ | DSM 7.1.1-42962-9 (Final) | 8 GB RAM | 3 x WD 6TB WD60EFRX Red Raid5, 1 x SSD Intel 128GB Basic

  • Ich bin mal so frei und teile ein Script, was ich für Backups auf dem UGREEN NAS zusammengeschraubt habe. Ist nicht besonders kompliziert und macht eigentlich nur das, was ich vorher sonst händisch an Befehlen in die Konsole copy&pasted habe. Weitere Details und wie man es nutzt ist im Code.

    Kann gerne verbessert/gefixt/optimiert und wieder geteilt werden.

    [ DXP4800+ | 2x Samsung 980 Pro 2TB | 4x Seagate IronWolf 24TB | UGOS ]

  • Beispiel Output:

    This image is exclusive to our members!
    Please log in or register for free to view graphics and attachments.

    [ DXP4800+ | 2x Samsung 980 Pro 2TB | 4x Seagate IronWolf 24TB | UGOS ]

  • Das Script einfach irgendwo auf dem NAS ablegen und die Pfade oben anpassen und ausführen mit entsprechenden Rechten.

    Ich habe gestern testweise z.B. mein immich gesichert, alles was mit immich zu tun hat vom NAS geworfen und zurückgespielt. Hat einwandfrei geklappt. Man muss natürlich noch sein Upload-Verzeichnis sichern.

    Bei immich z.B. hab ich mir das .yml was ich damals als Stack eingefügt hab genauso wieder als Stack erstellt, mein /volume1/docker/immich zurückgespielt, dann das /volume2/immich (wo die libraries und so sind). Dann das Stack deployed und immich ist exakt so wie vorher.

    Paperless hab ich noch nicht im Einsatz, daher kann ich dazu noch nichts sagen, aber es gibt im Paperless TUT eine Diskussion darüber, wie das gebackupped werden kann, glaube ich.

    [ DXP4800+ | 2x Samsung 980 Pro 2TB | 4x Seagate IronWolf 24TB | UGOS ]

    Edited once, last by Mavvy (May 31, 2025 at 11:06 AM).

  • Hallo Halvid

    Sofern alle deine Container als vollwertige Stacks in Portainer vorliegen, geht das. Soweit ich weiß, ist in diesem Backup aber nicht alles enthalten, beispielsweise werden ENV Variablen, welche via *.env Datei eingelesen wurden, nicht gesichert.

    Ein Update hierzu:

    Ich habe vor kurzem mein Immich Setup, was ich ursprünglich via immich.yml und einer stack.env Datei installiert hatte mit Portainer Backup gesichert. Also über Settings > General > Download backup file

    This image is exclusive to our members!
    Please log in or register for free to view graphics and attachments.

    In der anschließenden Portainer Backup-Datei befinden sich alle Stacks als docker-compose.yml in einem eigenen Ordner (Ordner heißt wahrscheinlich so, wie die ID des Stacks), und wenn man eine .env Datei beim Erstellen des Stacks verwendet hatte, landet diese ebenfalls im Backup. Ein anschließenes Wiederherstellen hat dann auch einwandfrei geklappt.

    This image is exclusive to our members!
    Please log in or register for free to view graphics and attachments.

    This image is exclusive to our members!
    Please log in or register for free to view graphics and attachments.

    This image is exclusive to our members!
    Please log in or register for free to view graphics and attachments.


    Dazu aber mal eine Portainer-Frage bzgl. des Backups. Wenn man das Backup passwortgeschützt erstellt, kommt da eine Datei mit Endung .tar.gz.encrypted heraus, die man nicht einfach so öffnen kann, um sich die einzelnen .yml und .env rauszuziehen. Wie/wo stellt man das Backup wieder her? In Portainer CE gibt es unter Settings ja keine Option zum Restore...

    [ DXP4800+ | 2x Samsung 980 Pro 2TB | 4x Seagate IronWolf 24TB | UGOS ]

  • Beim ersten Start von Portainer ist ja im Anmeldefenster ganz unten die Frage ob man ein Backup wieder herstellen möchte. Ich nehme an bei der Wiederherstellung kommt dann vor oder nach dem Import die Passwortabfrage dazu.

    Ich habe das selbst noch nicht gemacht, aber so schon gelesen.

    Edit: Schätze an die einzelne .yml wie in Deinen Screenshots wird man nur im Unverschlüsselten - tar.gz - ran kommen. Das geht mit Sicherheit.

    Meine Hardware

    iDX6011 Pro in Späh ^^

    DXP4800+ 2x8TB WDRedPl Btrfs Raid1 2x 2TB Lexar NM790 Raid1, 64GB RAM Kingst. KVR48S40BD8-32 DDR5/4800MH

    DXP2800 1x 12TB Seag. 1x 12TB WDRedPl, Raid1 Btrfs 16GB RAM Cruc. CT16G56C46S5.C8B2, 2x NVME Samsg,

    DS1525+ 2x8TB WD, Btrfs SHR, 2x 2TB NVME Lexar NM790 Raid1. 40GB ECC RAM_Speicher.de

    DS920+ DSM 7.3.2 Btrfs Raid1 2x8TB WD, 2x2TB Samsg. 970 EVOPlus, RAM 20GB DDR4-2666MHZ Speicher.de

    USV US3000, EatonEllip.PRO 850DIN, Switch Zyxel GS1200-8 1GB, Zyxel XMG-108 8 x 2,5GB

  • Kann gerne verbessert/gefixt/optimiert und wieder geteilt werden.

    Danke für dein Skript. Ich habs täglich per Cron laufen, ganz wunderbar.

    Hast du Adguard und/oder Backrest laufen? Deren Docker-Ordner beinhalten sehr große Log-Dateien, die nicht gesichert werden müssten. Ich würde sie gerne ausschließen. Bevor ich mich selbst ans Skript mache: Hast du so was vielleicht mittlerweile selbst implementiert?

  • Grendor nein leider noch nicht, aber könntest du das ebenfalls als cronjob laufen lassen, bevor das Backup gemacht wird? z.B. mit

    0 6 * * * docker exec adguard find /var/log/adguard -type f -mtime +7 -delete

    als Beispiel wenn dein Adguard-Container adguard heißt, und dessen Logs im Container unter /var/log/adguard liegen.

    Der obige Cronjob löscht dann im Logs-Ordner alle Logs, die älter als 7 Tage sind.

    [ DXP4800+ | 2x Samsung 980 Pro 2TB | 4x Seagate IronWolf 24TB | UGOS ]

Participate now!

Join our community with over 10,000 members!

Register yourself now for free to get full access to all content, graphics, downloads and other exclusive features!