webentwicklung-frage-antwort-db.com.de

Docker-Compose-Mounted-Volume

Um den Überblick über die von Docker-Compose verwendeten Volumes zu behalten, verwende ich gerne benannte Volumes. Dies funktioniert hervorragend für "normale" Volumes wie

version: 2
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
volumes:
  named_vol:

Aber ich kann nicht herausfinden, wie es funktioniert, wenn der lokale Host gemountet wird. Ich suche nach etwas wie:

version: 2
services: 
  example-app:
    volume:
      -named_homedir:/dir/in/container/volume
volumes:
  named_homedir: /c/Users/

oder

version: 2
services: 
  example-app:
    volume:
      -/c/Users/:/home/dir/in/container/ --name named_homedir

ist dies in irgendeiner Weise möglich oder stecke ich bei anonymen Volumes für gemountete fest?

45
pvgoddijn

Wie Sie in dieser GitHub-Ausgabe lesen können, mounten Sie benannte Volumes Jetzt ist eine Sache … seit 1.11 oder 1.12.). Fahrerspezifische Optionen sind dokumentiert. Einige Notizen aus dem GitHub-Thread:

docker volume create --opt type=none --opt device=<Host path> --opt o=bind

Wenn der Host-Pfad nicht vorhanden ist, wird er nicht erstellt.

Optionen werden buchstäblich an den Mount-Syscall übergeben. Wir können Sonderfälle für bestimmte "Typen" hinzufügen, da deren Verwendung umständlich ist ... wie im nfs-Beispiel [auf das oben verwiesen wird].

- @ cpuguy83

Um Ihre spezielle Frage zu beantworten, wie Sie diese beim Verfassen verwenden können, schreiben Sie in Ihren Abschnitt volumes:

my-named-volume:
     driver_opts:
           type: none
           device: /home/full/path #NOTE needs full path (~ doesn't work)
           o: bind

Dies liegt daran, dass, wie cpuguy83 im verknüpften Github-Thread schrieb, die Optionen (unter der Haube) direkt an den Befehl mount übergeben werden.

EDIT: Wie von ... kommentiert

  • … @Visslav, du kannst ${PWD} für relative Pfade.
  • … @ Mikeyjk, möglicherweise müssen Sie bereits vorhandene Volumes löschen:

    docker volume rm $(docker volume ls)
    
27
kaiser

Host-Volumes unterscheiden sich von benannten oder anonymen Volumes. Ihr "Name" ist der Pfad auf dem Host.

Es gibt keine Möglichkeit, den Abschnitt volumes für Host-Volumes zu verwenden.

7
dnephin

Ich habe vor kurzem nach einer Antwort auf dieselbe Frage gesucht und bin über dieses Plugin gestolpert: https://github.com/CWSpear/local-persist Sieht so aus, als ob es genau das zulässt, was das gestartete Thema tun möchte.

Habe es selbst noch nicht ausprobiert, dachte aber, dass es für jemanden nützlich sein könnte.

7
Stas Makarov

Ich habe das (fast) Gleiche versucht und es scheint mit etwas zu funktionieren:

version: '2'
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
      -/c/Users/:/dir/in/container/volume
volumes:
  named_vol:

Scheint für mich zu arbeiten (ich habe mich nicht damit befasst, habe es nur getestet).

5
rmNyro

OP scheint bereits vollständige Pfade zu verwenden, aber wenn Sie wie die meisten Leute daran interessiert sind, einen Projektordner in den Container zu mounten, kann dies hilfreich sein.

So geht's mit driver_opts wie @kaiser sagte und @linuxbandit als Beispiel. Sie können jedoch versuchen, die verfügbare Umgebungsvariable $ PWD normalerweise zu verwenden, um die Angabe vollständiger Pfade für Verzeichnisse im Docker-Compose-Kontext zu vermeiden:

logs-directory:
  driver_opts:
    type: none
    device: ${PWD}/logs
    o: bind
4
villasv