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 .


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 ...


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


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.