В Docker Compose v1.6.0 + теперь существует новый синтаксис файла / версия 2 для docker-compose.yml
файла. Изменения включают в себя отдельный ключ верхнего уровня с именем volumes
. Это позволяет «централизовать» определения объема в одном месте.
То , что я пытаюсь сделать , это назвать том там и один опорным объемом множественного пути на моем локальном диске хоста. Ниже приведен пример, генерирующий исключение Traceback
, оканчивающееся на
AttributeError: 'list' object has no attribute 'items'
Пример docker-compose.yml
:
version: '2'
services:
db:
image: postgres
volumes:
- database:/var/lib/postgres/data
php:
image: php-fpm:5.6
volumes:
- phpconf:/etc/php/conf.d
namedvolume:
container_name: namedvolume
build: ./Docker/Testvolume
volumes:
- ./Docker/Testvolume/shareme
volumes:
database:
- ./Docker/Postgres/db:ro
- ./Docker/Postgres/ini
phpconf:
- ./Docker/PHP-FPM/conf
singledir: ./Docker/foo
completemap: ./Docker/bar:/etc/service/conf.d
- namedvolume:/etc/service/conf.d # < this was a separate attempt w/o the other keys
… ?
До сих пор я читал все справочники по конфигурации томов Docker Compose docs master
-branch, справку по томам / драйверам тома Docker Compose и просматривал примеры GitHub, чтобы найти правильный ожидаемый синтаксис. Кажется, никто еще не использует это (GitHub), и документация далеко не полная (docker.com). Я также пытался создать отдельный том service
и ссылаться на него volumes
, но это также не работает. Любая идея о том, как этот синтаксис должен выглядеть?
источник
$(docker volume ls |awk '{print $2}')
вы можете использовать$(docker volume ls -q)
не только это проще, он не печатает «VOLUME» в первой строке.volumes_from
это наследовать список томов из другого контейнера. Чтобы использовать именованный том, вы используете синтаксис уровня обслуживания- NAME:DEST
и задаете путь вvolumes
ключе верхнего уровня . То, что делает этот пример (на момент написания этого), делает стандартный том в дополнение к именованному тому, а названный том просто не используется.Насколько я понимаю, вы можете использовать глобальный
volumes:
раздел дляТома в глобальном разделе будут созданы автоматически, если вы не укажете
external: true
. Вам все равно нужно будет указать каждой службе в своемvolumes:
разделе, где монтировать этот том.Вот очень простой пример:
Глобальная
volumes:
запись дляproject
приведет к созданию именованного томаproject
. Затем он монтируется как/bar
во/foo
второй службе, так и во второй. Оба сервиса совместно используют данные тома и могут читать / записывать их.Я не думаю, что то, что вы пытаетесь сделать, возможно (превращение нескольких путей в один том и с разными флагами r / w). Если это возможно, то, вероятно, найдя способ создать именованный том с этими свойствами с помощью других средств, а затем добавив его в качестве внешнего тома:
источник
project
и затем ссылаетесь на негоproject:/bar
, где наproject
самом деле определены пути?project:
псевдонима? Как Docker знать , если я хочу поделиться, скажем ,./some_folder/some_subfolder/yet_another_subfolder
кone:
иtwo:
контейнеров?Посмотрите, например, версию 2 , а также ссылку на конфигурацию тома :
Мой пример: (Версия 1)
источник
Version 2
раздел документа)volumes
клавишу верхнего уровня - что я не сделал, отсюда и вопрос. Что я не понимаю, так это то, чтоdocker-compose.yml
предназначено для объяснения в части с синтаксисом версии 1.Я думаю, что вы пытаетесь сделать примерно так же, как видно здесь . Короче говоря: в настоящее время невозможно создать именованный том, который ссылается на точку монтирования на хосте. Вы можете создать именованный том для обмена данными между контейнерами, но данные будут существовать только в самом томе и исчезать при удалении тома.
Предлагается монтирование именованных томов , но, к сожалению, в ближайшее время оно не будет добавлено к ядру. Однако это возможно с помощью подключаемого модуля docker с именем local-persist .
источник