Почему в docker -compose я должен писать полный путь к тому? - PullRequest
3 голосов
/ 06 мая 2020

У меня есть некоторые непонятные моменты с docker -компоновать тома (В docker windows сервере (контейнере)). Я написал следующую конфигурацию

volumes:
  - "C:/ProgramData/Docker/volumes/admin-stat-logs:C:/app/Logs"

и почему так необходимо записывать полный путь к тому?

если я напишу:

volumes:
  - "admin-logs:C:/app/Logs"

он генерирует ошибка ОШИБКА: Именованный том «admin-logs: C: / app / Logs: rw» используется в сервисе «admin-stat-table», но в разделе томов не найдено объявление.

почему это случилось?

ОБНОВЛЕНИЕ

позвольте мне показать, что я имею в виду (я сделал неверное объяснение). На изображении у нас есть короткое объявление из официальной документации.

enter image description here

Я пишу то же самое в моем случае:

volumes:
  - admin-logs:C:/app/Logs

Том создаю перед терминалом. Когда я запускаю docker -compose, я получаю следующую ошибку:

ОШИБКА: используется именованный том «admin-stat-logs: C: / app / Logs: rw» в сервисе "admin-stat-table", но в разделе томов не было найдено объявления.

Я ошибся в первом случае, это простое монтирование в папку, извините за мое недоразумение.

volumes:
  - "C:/ProgramData/Docker/volumes/admin-stat-logs:C:/app/Logs"

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Вам не нужно использовать полный путь. Вы можете использовать относительный путь к расположению вашего файла docker -compose.yml.

Когда вы пишете admin-logs:C:/app/Logs, вы указываете docker -compose использовать том с именем admin-logs . Если вы хотите использовать папку, в которой находится docker -compose, вы можете написать ./admin-logs:C:/app/Logs.

Если вы планируете использовать отдельный том docker, вам необходимо сначала определить его в docker -compose.yml. Вот пример, охватывающий оба случая:

version: '3'
services:
  mytest:
    image: ubuntu:18.04
    volumes:
      - "mymnt:/mnt/volume"
      - "./mymnt_on_host:/mnt/mounted_folder"
volumes:
  mymnt:

Вам понадобится каталог mymnt_on_host в папке, где находится docker -compose.yml.

Для получения дополнительной информации о this topi c, вы можете проверить справочное руководство для docker -compose.yml

UPDATE:

Если вы планируете использовать уже созданный том в вашем docker -compose вы можете использовать external: true в определении томов.

eg

version: '3'
services:
  mytest:
    image: ubuntu:18.04
    volumes:
      - "mymnt:/mnt/volume"
      - "./mymnt_on_host:/mnt/mounted_folder"
volumes:
  mymnt:
  my_existing_volume:
    external: true

Теперь, если вы запустите это, docker -compose не будет пытаться чтобы сгенерировать my_existing_volume, но он будет ожидать, что он уже найден на машине.

Для получения дополнительной информации проверьте внешнюю ссылку.

0 голосов
/ 06 мая 2020

Можете ли вы показать значение вашей версии в файле docker-compose.yml. Это должно быть version: '3' или version: '3.5'. Вероятно у вас version: '2'

...