Docker-создание именованного смонтированного Тома

чтобы отслеживать Тома, используемые docker-compose, мне нравится использовать именованные Тома. Это отлично подходит для "нормальных" томов, таких как

version: 2
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
volumes:
  named_vol:

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

version: 2
services: 
  example-app:
    volume:
      -named_homedir:/dir/in/container/volume
volumes:
  named_homedir: /c/Users/

или

version: 2
services: 
  example-app:
    volume:
      -/c/Users/:/home/dir/in/container/ --name named_homedir

возможно ли это каким-либо образом или я застрял с анонимными томами для смонтированных?

5 ответов


как вы можете прочитать в этом выпуске GitHub,установка имени Тома теперь это вещь ... С 1.11 или 1.12.). конкретные параметры драйвера документируются. Некоторые заметки из потока GitHub:

docker volume create --opt type=none --opt device=<host path> --opt o=bind

если путь хоста не существует, он не будет создан.

параметры передаются буквально в mount syscall. Мы можем добавить специальные случаи для определенных "типов", потому что они неудобны в использовании... как пример nfs [ссылка выше].

– @cpuguy83

чтобы решить ваш конкретный вопрос о том, как использовать это в compose, вы пишете под своим :

my-named-volume:
     driver_opts:
           type: none
           device: /home/full/path #NOTE needs full path (~ doesn't work)
           o: bind

это потому, что, как cpuguy83 написал в потоке GitHub, связанные, параметры (под капотом) передаются непосредственно в .

EDIT: как прокомментировали...

  • ... @visslav, you может использовать ${PWD} для относительных путей.
  • ... @mikeyjk, вам может потребоваться удалить существующие Тома:

    docker volume rm $(docker volume ls)
    

Тома Хоста отличаются от именованных томов или анонимных томов. Их "имя" - это путь на хосте.

нет способа использовать volumes Раздел для томов хоста.


недавно я искал ответ на тот же вопрос и наткнулся на этот плагин:https://github.com/CWSpear/local-persist Похоже, это позволяет только то, что тема начала хочет сделать.

Я еще не пробовал, но подумал, что это может быть полезно для кого-то.


Я пробовал (почти) то же самое, и, похоже, работает с чем-то вроде :

version: '2'
services: 
  example-app:
    volume:
      -named_vol:/dir/in/container/volume
      -/c/Users/:/dir/in/container/volume
volumes:
  named_vol:

Кажется, работает для меня (я не копался в нем, просто проверил его).


OP, похоже, уже использует полные пути, но если, как и большинство людей, вы заинтересованы в установке папки проекта внутри контейнера, это может помочь.

вот как это сделать с driver_opts Как сказал @kaiser и пример @linuxbandit. Но вы можете попробовать использовать обычно доступная переменная среды $PWD, чтобы избежать указания полных путей для каталогов в контексте docker-compose:

logs-directory:
  driver_opts:
    type: none
    device: ${PWD}/logs
    o: bind