178 votes

Docker Compose - Partager le volume nommé entre plusieurs conteneurs

Je suis en utilisant le menu fixe-composer et v3. Je suis en train de monter un volume dans le panneau:

./appdata:/appdata

J'aimerais avoir ceci comme un volume, puis de référence que le volume à partir de plusieurs conteneurs. Le volume de référence pour la configuration ne montre data-volume: comme un nom de volume, avec aucune valeur, donc il ne ressemble pas à la 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-composer.yml' volume 'app-volume" doit être un mappage pas une chaîne.

Évidemment, je sais que j'ai besoin de changer l' volumes paire clé/valeur, mais je ne sais pas comment faire pour changer cela pour que je puisse partager un volume entre les services.

J'ai aussi vérifié volumes_from mais effectivement cela permet tout simplement de l'héritage à partir d'autres conteneurs. J'ai vu quelqu'un l'utiliser volumes_from sur un autre récipient qui contient la cartographie qu'ils veulent, mais avec command: true ensemble de sorte que le conteneur n'est jamais réellement s'exécuter, ce qui me semble juste comme un hack.

Comment puis-je faire cela?


Remarque, je dois avoir de travail suivants:

nginx:
    volumes:
        - ./appdata:/appdata
php:
    volumes:
        - ./appdata:/appdata

Mais c'est juste de la duplication et est quelque chose que je suis en espérant un volume nommé pourrait m'aider à éviter :-)

211voto

Kannaj Points 1802

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:
 

47voto

Robert Points 357

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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X