Jak ustawić ścieżkę na hoście dla nazwanego woluminu w docker-compose.yml

87

Poniższy przykład tworzy bazę danych o nazwie volume i odwołuje się do niej w usłudze db :

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

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

Widzę domyślną ścieżkę dla woluminu:

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

Moje pytanie brzmi, jak skonfigurować ścieżkę na hoście dla dbdatawoluminu?

misza
źródło
Zobacz moją odpowiedź na nowszą / właściwą metodę -> stackoverflow.com/a/61743638/5079799
FreeSoftwareServers

Odpowiedzi:

76

Wraz ze localsterownikiem głośności przychodzi możliwość używania dowolnych montowań; używając bind mount możesz to osiągnąć.

Aby skonfigurować nazwany wolumin, który zostanie zamontowany /srv/db-data, Twój docker-compose.ymlwyglądałby następująco:

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'

Nie testowałem tego z wersją 2 formatu pliku tworzenia wiadomości, ale https://docs.docker.com/compose/compose-file/compose-versioning/#version-2 nie wskazuje, że nie powinno działać.

Nie testowałem też tego na Windowsie ...

Christian Ulbrich
źródło
3
Możesz użyć montowania bind ze znacznie prostszą składnią niż ta: woluminy: - ./dbdata:/var/lib/mysql. Jedynym „problemem” związanym z montowaniem wiązania jest to, że nie kopiuje on zawartości kontenera do hosta automatycznie, w przeciwieństwie do nazwanego woluminu. docs.docker.com/compose/compose-file/#volumes
mikey
13
OP zapytał konkretnie o nazwane woluminy, a nie o to, jak najłatwiej używać montowania wiązania. Jeśli chcesz skonfigurować ścieżkę dla nazwanego woluminu, możesz to osiągnąć za pomocą montowania bind, tak jak pokazano powyżej. Korzystanie z nazwanych woluminów ma tę zaletę, że można ich po prostu ponownie użyć w pliku docker-compose.yml.
Christian Ulbrich
1
@mikey Opublikowałem tutaj pytanie z prośbą o wyjaśnienie Twojego pierwszego komentarza: stackoverflow.com/questions/65176940/… . Byłbym bardzo wdzięczny, gdybyś mógł odpowiedzieć. Dzięki.
thanks_in_advance
1
@thanks_in_advance - wygląda na to, że zostałem przez to pobity! tyvm za oznaczenie mnie
mikey,
1
@mikey możesz dołączyć do dyskusji za pośrednictwem komentarzy.
thanks_in_advance
9

Lokalizacją nazwanych woluminów zarządza docker; jeśli chcesz samodzielnie określić lokalizację, możesz albo „powiązać montowanie” katalogu hosta, albo użyć wtyczki woluminu, która umożliwia określenie ścieżki.

Możesz znaleźć szczegóły w innej odpowiedzi, którą niedawno opublikowałem; https://stackoverflow.com/a/36321403/1811501

thaJeztah
źródło
1
Właściwie wystarczy użyć localwtyczki woluminu, która jest dostarczana z samym dockerem; zobacz moją odpowiedź jako przykład.
Christian Ulbrich
-2

Od docker-compose v3.2teraz możesz to zrobić w następujący sposób:

Uwaga: Wiele, jak się spodziewałem, gdybyś version: "3"użył najnowszej / najnowszej wersji V3, nie używa v3.0, MUSISZ określić co najmniej, 3.2aby użyć poniższej metody konfiguracji.

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:

Uwaga:

Nazwane woluminy muszą być wymienione pod klawiszem woluminów najwyższego poziomu, jak pokazano.

FreeSoftwareServers
źródło
Przepraszam, jeśli nie rozumiem Twojej odpowiedzi @FreeSoftwareServer, pytanie brzmi: „Jak możemy zmapować nazwane woluminy do folderu hosta”?
Dheeraj Kumar
Próbowałem uprościć swoją odpowiedź, być może zacznij nowe pytanie od konkretnego problemu. @Dheeraj Kumar
FreeSoftwareServers
Jak jest dbdatamapowany na usługę dbjako jego objętość? @FreeSoftwareServers
Nam G VU
Linia źródłowa? @NamGVU Być może nowe pytanie dotyczące konkretnego problemu byłoby lepsze
FreeSoftwareServers
Nie rozumiem głosów przeciw? Jest to znacznie bardziej przejrzysty i nowszy sposób `ustawiania ścieżki na hoście dla nazwanego woluminu w docker-compose.yml`
FreeSoftwareServers