Як встановити шлях на хості для іменованого тому в docker-compose.yml


87

Приклад нижче створює dbdata з іменем тому і посилається на нього в службі db :

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

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

Я бачу шлях за замовчуванням до тому:

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

Моє питання полягає в тому, як налаштувати шлях на хості для dbdataтому?


Дивіться моя відповідь для нового / правильного методу -> stackoverflow.com/a/61743638/5079799
FreeSoftwareServers

Відповіді:


76

З localдрайвером гучності поставляється можливість використовувати довільні кріплення; за допомогою кріплення для прив'язки ви можете досягти саме цього.

Для налаштування іменованого тому, який монтується /srv/db-data, docker-compose.ymlвиглядає так:

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'

Я не тестував його з версією 2 формату файлу складання, але https://docs.docker.com/compose/compose-file/compose-versioning/#version-2 не вказує, що він не повинен працювати.

Я також не тестував його на Windows ...


3
Ви можете використовувати монтування прив'язки з набагато простішим синтаксисом, ніж той: volume: - ./dbdata:/var/lib/mysql. Єдина "проблема" монтування прив'язки полягає в тому, що він не копіює вміст контейнера на хост автоматично, на відміну від названого тому. docs.docker.com/compose/compose-file/#volumes
mikey

13
OP спеціально запитав про іменовані томи, а не про те, як використовувати монтування прив'язки найпростішим способом. Якщо ви хочете налаштувати шлях для іменованого тому, ви можете досягти цього за допомогою монтування прив'язки, як показано вище. Використання іменованих томів має ту перевагу, що ви можете просто повторно використовувати їх у вашому docker-compose.yml.
Крістіан Ульбріх,

1
@mikey Я розмістив запитання з проханням пояснити ваш перший коментар тут: stackoverflow.com/questions/65176940/… . Будемо дуже вдячні, якщо Ви зможете відповісти. Дякую.
thanks_in_advance

1
@thanks_in_advance - схоже, мене побили! tyvm for теги мене
mikey

1
@mikey не соромтеся додавати до обговорення там за допомогою коментарів.
thanks_in_advance

9

Розташування названих томів управляється докером; якщо ви хочете вказати місце розташування самостійно, ви можете або «прив’язати монтування» хост-каталогу, або використовувати плагін обсягу, який дозволяє вказати шлях.

Ви можете знайти деякі подробиці в іншій відповіді, яку я нещодавно розмістив; https://stackoverflow.com/a/36321403/1811501


1
Насправді вам просто потрібно використовувати localплагін Volume, який постачається з самим докером; див. мою відповідь для прикладу.
Крістіан Ульбріх,

-2

Станом docker-compose v3.2тепер ви можете зробити це в такий спосіб :

Примітка: Багато, як я вже зрозумів, якщо ви ставите, що version: "3"він буде використовувати найновіший / найновіший V3, він цього не використовує v3.0, ви ПОВИННІ вказати як мінімум, 3.2щоб використовувати вказаний нижче спосіб конфігурації.

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:

Примітка:

Іменовані томи повинні бути перелічені під ключем томів верхнього рівня, як показано.


Вибачте, якщо я не зрозумів Вашої відповіді @FreeSoftwareServer, тут виникає питання: "Як ми можемо зіставити названі томи з папкою хосту"?
Dheeraj Kumar

Я спробував спростити свою відповідь, можливо, розпочати нове запитання з вашої конкретної проблеми. @Dheeraj Kumar
FreeSoftwareServers

Як dbdataвідображається послуга dbяк її обсяг? @FreeSoftwareServers
Nam G VU

Вихідний рядок? @NamGVU Можливо, нове запитання щодо вашої конкретної проблеми було б кращим
FreeSoftwareServers

Я не розумію голосів проти? Це набагато чистіший і новий спосіб `встановити шлях на хості для іменованого тому в
docker-compose.yml`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.