web-dev-qa-db-fra.com

Partager le volume entre les conteneurs Docker

Salut, j'utilise docker pour déployer certains services et ici, je veux partager les volumes de docker entre différents conteneurs de docker.

Supposons que j'ai un conteneur Docker A qui monte un volume sur/data. Voici le Dockerfile de A

VOLUME /data

D'après ce que je comprends, cela attachera un volume au conteneur, mais cela ne montera pas de répertoire hôte sur le conteneur. Ainsi, les données à l'intérieur de ce volume sont toujours à l'intérieur du conteneur A.

J'ai un autre conteneur B qui fournit un service ftp. Il accède aux données sous volume/public. Le Dockerfile de B est

VOLUME /public

Maintenant, je veux les lier ensemble afin de pouvoir utiliser B pour gérer les données de A. Depuis le doc docker https://docs.docker.com/engine/userguide/containers/dockervolumes/ J'utiliserai --volumes-from flag pour monter le volume de données de A sur B. Mais cette commande montera les données de A sur /data en B au lieu de /public et dans ce cas, le conteneur B n'est pas en mesure d'accéder aux données. Je n'ai vu aucun moyen de renommer le point de montage.

Des suggestions ou des meilleures pratiques pour gérer ce cas?

Merci beaucoup!

================================================== ==

Le conteneur de données uniquement offre une bonne solution pour ce cas. Mais si vous souhaitez utiliser des volumes à partir de et monter les données à différents points de montage, cette question peut être utile! Comment mapper les chemins de volume à l'aide de --volumes-from de Docker?

15
Ciel

Vous pouvez trouver de nombreux pointeurs mentionnant des conteneurs de données uniquement et --volumes-from. Cependant, depuis Docker 1.9, les volumes sont devenus des citoyens de première classe, ils peuvent avoir des noms et avoir plus de flexibilité:

Il est maintenant facile d'obtenir le comportement que vous souhaitez, voici un exemple:

  1. Créez un volume de données nommé avec le nom service-data:

    docker volume create --name service-data
    
  2. Vous pouvez ensuite créer un conteneur qui le monte dans votre dossier/public en utilisant le -v drapeau:

    docker run -t -i -v service-data:/public debian:jessie /bin/bash
    

    À des fins de test, nous créons un petit fichier texte dans notre dossier mappé:

    cd public
    echo 'hello' > 'hello.txt'
    
  3. Vous pouvez ensuite attacher votre volume nommé à un deuxième conteneur, mais cette fois sous le dossier de données:

    docker run -t -i -v service-data:/data debian:jessie /bin/bash
    ls /data       #-->shows "hello.txt"
    

N'oubliez pas que si les deux conteneurs utilisent des images différentes, faites attention à la propriété et aux autorisations!

21
Stéphane C.