Avec Docker Compose v1.6.0 +, il existe maintenant une nouvelle syntaxe de fichier / version 2 pour le docker-compose.yml
fichier. Les modifications incluent une clé distincte de niveau supérieur nommée volumes
. Cela permet de "centraliser" les définitions de volume en un seul endroit.
Ce que j'essaie de faire, c'est de nommer les volumes et d'avoir un chemin d'accès multiple de référence de volume unique sur mon disque hôte local. Voici un exemple, levant une exception avec un Traceback
qui se termine par
AttributeError: 'list' object has no attribute 'items'
Exemple 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
… ?
Jusqu'ici, j'ai lu toute la référence de configuration de volume Docker Compose docs- master
branch , la référence Volume / Pilote de Docker Compose et j'ai consulté des exemples GitHub pour trouver la syntaxe correcte attendue. Il semble que personne ne l'utilise déjà (GitHub) et la documentation est loin d'être complète (docker.com). J'ai également essayé de créer un volume séparé service
et de le référencer volumes
, mais cela ne fonctionne pas aussi bien. Toute idée sur la façon dont cette syntaxe est censée ressembler?
la source
$(docker volume ls |awk '{print $2}')
vous pouvez utiliser$(docker volume ls -q)
Non seulement c'est plus simple, il n'imprime pas "VOLUME" sur la première ligne.volumes_from
consiste à hériter de la liste des volumes d'un autre conteneur. Pour utiliser un volume nommé, utilisez la syntaxe de niveau de service- NAME:DEST
et définissez le chemin dans lavolumes
clé de niveau supérieur . Au moment de la rédaction de cet exemple, cet exemple crée un volume standard en plus d'un volume nommé, et le volume nommé n'est tout simplement pas utilisé.Si je comprends bien, vous pouvez utiliser la
volumes:
section globale pourLes volumes de la section globale seront créés automatiquement, à moins d'indication contraire de votre part
external: true
. Vous devrez toujours indiquer à chaque service de savolumes:
section où monter ce volume.Voici un exemple très simple:
L'
volumes:
entrée globale forproject
provoquera laproject
création d' un volume nommé . Il est ensuite monté/bar
en service un, et/foo
en service deux. Les deux services partagent les données du volume et peuvent les lire / écrire.Je ne pense pas que ce que vous essayez de faire soit possible (transformer plusieurs chemins en un seul volume et avec différents indicateurs r / w). Si c'est possible, alors probablement en trouvant un moyen de créer un volume nommé avec ces propriétés par d'autres moyens, puis en l'ajoutant en tant que volume externe:
la source
project
puis que vous le référezproject:/bar
, où sont lesproject
chemins réellement définis?project:
alias? Comment docker sait-il si je veux partager, dire./some_folder/some_subfolder/yet_another_subfolder
à laone:
ettwo:
conteneurs?Consultez la version 2, par exemple, ainsi que la référence de configuration de volume :
Mon exemple: (version 1)
la source
Version 2
section du document)volumes
clé de niveau supérieure distincte - ce que je n'ai pas fait, d'où la question. Ce que je ne comprends pas, c'est ce que ladocker-compose.yml
partie avec la syntaxe de la version 1 est censée m'expliquer.Je pense que ce que vous essayez de faire est à peu près le même qu’on le voit ici . En bref: il n'est actuellement pas possible de créer un volume nommé faisant référence à un point de montage sur l'hôte. Vous pouvez créer un volume nommé pour partager des données entre des conteneurs, mais les données n'existeront que dans le volume lui-même et disparaîtront lorsque vous supprimerez le volume.
Le montage de volumes nommés a été proposé , mais malheureusement, il ne sera pas ajouté au noyau dans un avenir proche. Cependant, cela est possible en utilisant un plugin de docker nommé local-persist .
la source