Skip to main content

Volume aus existierendem Container erstellen

Manchmal bietet der Container nicht die Möglichkeit, ein Volume vor dem ersten Start zu erstellen. Setzt man das Volume dennoch, bleibt das Verzeichnis leer und die Anwendung meldet einen Fehler, z. B. dass sie nicht in das Verzeichnis schreiben kann, auf das das Volume gemountet ist.

Man kann existierende Ordner aus laufenden oder gestoppten Containern heraus kopieren. Dafür ist es notwending den Container einmal zu starten und die Anwendung vollständig hochfahren zu lassen.

  1. Starten des Containers mit der entsprechenden Anwendung
  2. Sofern die Anwendung läuft und alle allgemeinen Einstellungen vorgenommen wurden, den Container stoppen
    docker stop [CONTAINER_NAME]
    
  3. Nun das Verzeichnis aus dem Container an einen beliebigen Ort kopieren, z. B. in den Ordner der docker-compose.yml-Datei
    docker cp [CONTAINER_NAME]:/pfad/zum/ordner/oder/datei .
    
  4. Da der Zugriff auf die Ordner und Dateien oftmals über einen gesonderten Benutzer und Gruppe erfolgen, muss die Berechtigung nun ermittelt werden
    docker exec [CONTAINER_NAME] ls -lsan /pfad/zum/ordner/oder/datei
    
    Hier werden nun die enthaltenen Dateien und Ordner angezeigt. Beim Aufruf des Befehls "ls" wird der Parameter "n" übergeben, damit die User-ID und die Gruppen-ID angezeigt werden. Diese können sich auf dem Host-System unterscheiden, weshalb wir nicht den Namen benötigen.
    total 184
     4 drwxr-xr-x 15 33 0  4096 May 25 17:24 .
     4 drwxrwxr-x  1 33 0  4096 May 29 03:57 ..
     4 drwxr-xr-x 43 33 0  4096 May 25 17:24 ordner1
    20 -rw-r--r--  1 33 0 19327 May 25 17:24 ordner2
    
  5. Nun müssen wir die Besitzer in dem lokalen Ordner setzen
    chown -R 33:0 /pfad/zum/ordner/oder/datei
    
  6. Das Volume-Mapping kann jetzt im Container-Start oder in der docker-compose.yml-Datei eintragen werden. Die Dateien werden nun unter /pfad/zum/ordner/oder/datei persistiert.