Persistente Docker-Volumes mit NFS und CIFS

Ein aus meiner Erfahrung “running Problem” mit dem dauerhaften Betrieb von Dockeranwendungen sind persistente Docker-Volumes: Die Frage, wie man Volumes dauerhaft außerhalb des Docker-Hosts abgelegt bekommt, damit sie z.B. ge-backup-t werden können oder einen Docker-Host Neubau überstehen. Die von mir seit langem praktizierte Methode ist, dass der Docker-Host vom File-Server die Volumes mountet und diese Mounts dann in den Containern verwendet werden (-v /mnt/dockervolumes/mycontainer:/var/data/...). Dies hat u.a. den Nachteil, dass man zum Erzeugen des Containers (im Compose-File) Infos über die Infrastruktur (den Mount-Pfad) verwenden muss. Außerdem muss beim Erzeugen des Docker-Hosts der Mount angelegt werden. Das mache ich zwar inzwischen automatisch per Ansible, ist aber nicht Standard – also meines Wissens z.B. nicht per docker-machine create machbar.

Daher bin ich auf der Suche nach einer Lösung, die sozusagen “Docker-konform” und außerhalb des Compose-Files stattfindet. Eine Möglichkeit, auf die ich nun gestoßen bin, ist das Erzeugen von Volumes direkt auf NFS- oder CIFS-/SMB-Laufwerken. Und das habe ich so hinbekommen:

Persistente Docker-Volumes mit NFS:

docker volume create \
    --driver local \
    --opt type=nfs \
    --opt o=addr=192.168.41.28,rw \
    --opt device=:/export/dockervolumes/xxtestvolumepath \
    xxtestvolume


docker run -v xxtestvolume:/world busybox touch /world/xx1
docker run -v xxtestvolume:/world busybox ls /world

Persistente Docker-Volumes mit CIFS/SMB:

docker volume create \
    --driver local \
    --opt type=cifs \
    --opt o=addr=192.168.41.28,rw \
    --opt device=//192.168.41.28/xxtestvol \
    --opt o=uid=0,username=smbusername,password=smbpw,nounix,file_mode=0770,dir_mode=0770 \
    xxtestvolume2


docker run -v xxtestvolume2:/world busybox touch /world/xx1
docker run -v xxtestvolume2:/world busybox ls /world

Ob das nun die von mir bevorzuge und dauerhaft verwendete Methode wird, weiß ich noch nicht…

Links

https://forums.docker.com/t/docker-compose-how-to-use-nfs-volumes/23255/2
https://docs.docker.com/engine/reference/commandline/volume_create/#driver-specific-options
https://docs.docker.com/compose/compose-file/compose-file-v2/#driver

5 thoughts on “Persistente Docker-Volumes mit NFS und CIFS

  1. Im Dockerfile ab v2 geht das in etwa so:

    ...
    volumes:
      medien:
        driver_opts:
          type: cifs 
          o: addr=192.168.99.99,ro,uid=1000,username=uuu,password=ppp,nounix,file_mode=0770,dir_mode=0770
          device: //192.168.99.99/medien
    ...
    
    services:
      mediaserver:
        volumes:
          - medien:/data/medien
        ...
    
  2. Klingt Cool – Insbesondere wenn man probiert, remote Container oder Hosts via ElkarBackup (rsynk/rsnapshot) auf eine Synology DS zu sichern. Das werde ich direkt mal ausprobieren 🙂

    1. prima. Freut mich. Berichte mal über deine Erfahrungen. Ich freue mich jederzeit über neue Ideen und Input Das Problem der persistenten volumes habe ich meines Erachtens immer noch nicht zufriedenstellend gelöst.

  3. Hallo,

    Funtioniert super!

    Meine Frage nun, wie stelle ich sicher das die Verschiedenen Container nur Ihr Verzeichnis nutzen und nicht eine ebene zurück gehen?

    Oder ist das bereits mit dem Eingabe des Pfades gelöst?

    ALso

    NAS-NFS
    -Docker
    — Bilder
    — Media

    Container welcher auf BIlder zugreift, soll nicht auf Media zugreifen können.

    1. Die Container können nicht “außerhalb” der gemounteten Verzeichnisse zugreifen, das ist eine der Kern-Ideen. Probier es doch einfach mal aus, indem Du in so einen Container mit “docker exec … bash” reingehst und dann schaust, worauf Du so zugreifen kannst.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert