J'utilise docker-compose et v3. J'essaye de monter un volume dans docker:
./appdata:/appdata
J'aimerais que ce soit un volume, puis que ce volume soit référencé à partir de plusieurs conteneurs. Le référence de configuration de volume n'affiche que data-volume:
sous forme de volume nommé, sans valeur; il ne ressemble donc pas à ce qui est décrit ci-dessus.
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.
De toute évidence, je sais que je dois changer la paire clé/valeur volumes
, mais je ne suis pas sûr comment changer cela pour pouvoir partager un volume entre services.
J'ai aussi vérifié volumes_from
mais cela n'autorise en réalité que l'héritage d'autres conteneurs. J'ai vu quelqu'un utiliser volumes_from
sur un autre conteneur contenant le mappage souhaité, mais avec command: true
défini de sorte que le conteneur ne soit jamais réellement exécuté, ce qui me semble être un hack.
Comment puis-je faire ceci?
Notez que je fais le fonctionnement suivant:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
Mais ce n’est que du dédoublement et j’espère qu’un volume nommé pourra m'aider à éviter :-)
Les volumes nommés peuvent être partagés entre les conteneurs de la manière suivante:
_services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume: location_in_the_container
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume: location_in_the_container
volumes:
app-volume:
_
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 conteneur web
à un volume nommé appelé _static-content
_, qui est ensuite lu et servi par le conteneur nginx
:
_services:
nginx:
container_name: nginx
build: ./nginx/
volumes:
- static-content:/usr/src/app
web:
container_name: web
env_file: .env
volumes:
- static-content:/usr/src/app/public
environment:
- NODE_ENV=production
command: npm run package
volumes:
static-content:
_
Cela résout le problème sans utiliser les volumes nommés:
volumes:
- ./appdata:/appdata
Donc, ça ressemble à:
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- ./appdata:/appdata
php:
build: ./php/
expose:
- 9000
volumes:
- ./appdata:/appdata