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?
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:
Créez un volume de données nommé avec le nom service-data
:
docker volume create --name service-data
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'
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!