So legen Sie in docker-compose.yml einen Pfad auf dem Host für ein benanntes Volume fest

85

Beispiel unten DBData genannt Volumen und Verweise es innerhalb db Service:

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local

(von https://stackoverflow.com/a/35675553/4291814 )

Ich kann den Pfad für die Lautstärke standardmäßig sehen:

/var/lib/docker/volumes/<project_name>_dbdata

Meine Frage ist, wie man den Pfad auf dem Host für das dbdataVolume konfiguriert .

Mischa
quelle
Siehe meine Antwort für eine neuere / richtige Methode -> stackoverflow.com/a/61743638/5079799
FreeSoftwareServers

Antworten:

73

Mit dem localVolume-Treiber können beliebige Mounts verwendet werden. Mit einem Bind Mount können Sie genau dies erreichen.

Zum Einrichten eines benannten Volumes, in das eingebunden wird /srv/db-data, docker-compose.ymlsieht es folgendermaßen aus:

version: '2'
services:
  db:
    image: mysql
    volumes:
      - dbdata:/var/lib/mysql
volumes:
  dbdata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/srv/db-data'

Ich habe es nicht mit der Version 2 des Compose-Dateiformats getestet, aber https://docs.docker.com/compose/compose-file/compose-versioning/#version-2 zeigt nicht an, dass es nicht funktionieren sollte.

Ich habe es auch nicht unter Windows getestet ...

Christian Ulbrich
quelle
3
Sie können einen Bind-Mount mit einer weitaus einfacheren Syntax verwenden: Volumes: - ./dbdata:/var/lib/mysql. Das einzige Problem bei einem Bind-Mount besteht darin, dass der Containerinhalt im Gegensatz zu einem benannten Volume nicht automatisch auf den Host kopiert wird. docs.docker.com/compose/compose-file/#volumes
Mikey
12
OP fragte speziell nach benannten Volumes und nicht nach der einfachsten Verwendung eines Bind-Mount. Wenn Sie den Pfad für ein benanntes Volume konfigurieren möchten, können Sie dies mit einem Bind-Mount erreichen, wie oben gezeigt. Die Verwendung benannter Volumes hat den Vorteil, dass Sie sie einfach in Ihrer docker-compose.yml wiederverwenden können.
Christian Ulbrich
1
@mikey Ich habe hier eine Frage gestellt, um Klarheit über Ihren ersten Kommentar zu erhalten: stackoverflow.com/questions/65176940/… . Würde mich sehr freuen, wenn Sie antworten könnten. Vielen Dank.
Thanks_in_advance
1
@thanks_in_advance - sieht so aus, als wäre ich geschlagen worden! tyvm für das Markieren von mir
mikey
1
@mikey zögern Sie nicht, die Diskussion dort über Kommentare hinzuzufügen.
Thanks_in_advance
9

Der Speicherort der benannten Volumes wird vom Docker verwaltet. Wenn Sie den Speicherort selbst angeben möchten, können Sie entweder ein Hostverzeichnis "binden" oder ein Volume-Plugin verwenden, mit dem Sie einen Pfad angeben können.

Sie finden einige Details in einer anderen Antwort, die ich kürzlich gepostet habe. https://stackoverflow.com/a/36321403/1811501

thaJeztah
quelle
1
Eigentlich müssen Sie nur das localVolume-Plugin verwenden, das mit Docker selbst geliefert wird. siehe meine Antwort für ein Beispiel.
Christian Ulbrich
-1

Ab docker-compose v3.2 jetzt können Sie es wie folgt tun:

Hinweis: Viele, wie ich dachte, wenn Sie sagen, dass version: "3"es die neueste / neueste V3 verwenden würde, werden nicht verwendet v3.0. Sie MÜSSEN mindestens angeben 3.2, um die folgende Konfigurationsmethode zu verwenden.

https://docs.docker.com/compose/compose-file/#volumes

version: "3.2"
services:
  db:
    image: postgres:latest
    volumes: 
      - type: volume
        source: /opt/db/vols/dbdata
        target: /var/lib/postgresql/data
        volume:
          nocopy: true



volumes:
   dbdata:

Hinweis:

Benannte Volumes müssen wie gezeigt unter dem Schlüssel für Volumes der obersten Ebene aufgeführt sein.

FreeSoftwareServer
quelle
Entschuldigung, wenn ich Ihre Antwort @FreeSoftwareServer nicht verstanden habe, lautet die Frage hier "Wie können wir benannte Volumes dem Hostordner zuordnen"?
Dheeraj Kumar
Ich habe versucht, meine Antwort zu vereinfachen und vielleicht eine neue Frage mit Ihrem speziellen Problem zu beginnen. @Dheeraj Kumar
FreeSoftwareServers
Wie wird dbdatader Service dbals Volumen zugeordnet? @FreeSoftwareServers
Nam G VU
Die Quellzeile? @NamGVU Vielleicht wäre eine neue Frage mit Ihrem speziellen Problem besser
FreeSoftwareServers
Ich verstehe die Abstimmungen nicht? Dies ist eine viel sauberere und neuere Methode, um
FreeSoftwareServers