Разрешение нескольким сервисам в docker-compose совместно использовать объединенный том - PullRequest
0 голосов
/ 18 мая 2018

Учитывая файл docker-compose.yml, как показано ниже, я ищу способ, которым обе службы a и b могут иметь доступ к общему объему, который состоит из объединенных содержимого обоихконтейнеры.

version: '3'
volumes:
   shared-merged-volume:
services:
   a:
     volumes:
       - shared-merged-volume:/shared
   b:
     volumes:
       - shared-merged-volume:/shared

Допустим, служба a имеет каталог /shared/dir-from-a, а служба b имеет аналогичный каталог /shared-dir-from-b.Желаемый результат - в итоге:

$ ls /shared # from either container
dir-from-a
dir-from-b

Я обнаружил, что один из контейнеров "выиграл" и только один из этих двух каталогов присутствует.Я могу обойти эту проблему, как эта, но она более многословна и требует изменений, если содержимое каталога когда-либо меняется:

version: '3'
volumes:
   service-a-shared-volume:
   service-b-shared-volume:
services:
   a:
     volumes:
       - service-a-shared-volume:/shared/dir-from-a
       - service-b-shared-volume:/shared/dir-from-b
   b:
     volumes:
       - service-a-shared-volume:/shared/dir-from-a
       - service-b-shared-volume:/shared/dir-from-b

Заранее благодарен за любую помощь!

1 Ответ

0 голосов
/ 18 мая 2018

Требуется ли использование именованного тома?

Если нет, то для выполнения такого слияния я обычно просто сопоставляю каталоги с одним местом на диске хоста, вместо того чтобы использовать тома, и он сливается без проблем.Проверено на больших нагрузках и одновременной записи нескольких контейнеров.

предложенный файл компоновки:

version: '3'
volumes:
   shared-merged-volume:
services:
   a:
     volumes:
       - /location/on/host/system:/shared
   b:
     volumes:
       - /location/on/host/system:/shared

Редактирование из комментариев

Этот метод монтирует все, что находится влокальный каталог хоста на /shared, что означает, что если он пуст - он будет монтировать пустой каталог, а все, что там было - будет перезаписано пустым каталогом.Все, что будет записано внутри этого монтирования после запуска службы, будет сохранено и объединено между службами, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...