J'utilise docker-compose et v3. J'essaye de monter un volume dans le docker:
./appdata:/appdata
Je voudrais avoir ceci comme volume, puis référencer ce volume à partir de plusieurs conteneurs. La référence de configuration de volume s'affiche uniquement data-volume:
sous la forme d'un volume nommé, sans valeur, donc cela ne ressemble pas à ce qui précède.
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume
volumes:
app-volume: ./appdata:/appdata
Cela me donne:
ERREUR: dans le fichier './docker-compose.yml', le volume 'app-volume' doit être un mappage et non une chaîne.
Évidemment, je sais que j'ai besoin de changer la volumes
paire clé / valeur, mais je ne sais pas comment changer cela pour pouvoir partager un volume entre les services.
J'ai également vérifié, volumes_from
mais cela permet simplement l'héritage d'autres conteneurs. J'ai vu quelqu'un utiliser volumes_from
sur un autre conteneur qui contient le mappage souhaité, mais avec command: true
set pour que le conteneur ne soit jamais réellement exécuté, ce qui me semble être un hack.
Comment puis-je faire ceci?
Remarque, je fais fonctionner les éléments suivants:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
Mais ce n'est que de la duplication et j'espère qu'un volume nommé pourrait m'aider à éviter :-)
la source
Réponses:
Les volumes nommés peuvent être partagés entre les conteneurs de la manière suivante:
Voici un exemple de configuration que j'utilise pour une meilleure compréhension. J'expose les fichiers statiques générés à partir de mon
web
conteneur à un volume nommé appeléstatic-content
qui est ensuite lu et servi par lenginx
conteneur:la source
static_content
sur le système de fichiers hôte?app-volume: location_in_the_container
est faux./usr/src/app
lenginx
conteneur et/usr/src/app/public
leweb
conteneur contenaient tous deux un contenu original, lequel sera utilisé et pourquoi?collectstatic
dans un conteneur et voulez que les résultats soient disponibles dans un autre, mais vous ne vous souciez pas du dossier hôteCela résout le problème sans utiliser de volumes nommés:
Donc, ça ressemble à:
la source
./appdata
, c'est ce que j'essaye de faire. Laissez cette réponse ici :) +1Le docker nommé volumes a été supprimé à partir de la version docker-compose 3.
Cependant, vous pouvez utiliser des champs d' extension pour éviter de dupliquer la source des volumes et vous empêcher de futures fautes de frappe:
REMARQUE: cette fonctionnalité est disponible à partir du format de fichier de la version 3.4.
la source
volumes
champ de premier niveau , semblent toujours être une chose dans la v3 dedocker-compose
.