Обычный сценарий создания томов - использовать именованный том по умолчанию, который сопоставляется с драйвером локального тома и помещает тома в / var / lib / docker / volume.Не то, что вы ищете, но это простой вариант для многих:
version: '3'
volumes:
myvolume:
othervolume:
services:
myservice:
volumes:
- myvolume:/volume/path
Обычный метод для сопоставления тома хоста - указать путь напрямую, имя для тома не требуется.Опять же, не то, что вы просите, но это очень легко реализовать.Это подключаемое монтирование под крышками:
version: '3'
services:
myservice:
volumes:
- ./path:/volume/path
Если вы хотите именованный том и хост-том вместе, то вам нужен именованный том, настроенный для использования связывания.Недостатком этого является сбой, если каталог не существует, но есть и то, что докер может инициировать пустой каталог для содержимого образа.
version: '3'
volumes:
myvolume:
driver: local
driver_opts:
type: none
o: bind
device: /host/path/to/volume
services:
myservice:
volumes:
- myvolume:/container/volume/path
Обратите внимание, недостатком bind mounts является то, что онразмещает файлы, которые управляются контейнерами, с помощью uid / gid из контейнера, внутри пути, который, вероятно, используют другие пользователи на хосте, часто с другим uid / gid на хосте.В результате возникают проблемы с разрешениями на хосте или внутри контейнера.Вам нужно выровнять uid / gid между двумя, чтобы избежать этого.