web-dev-qa-db-fra.com

Peut-on monter des sous-répertoires d'un volume nommé dans docker?

Le fichier docker-compose https://docs.docker.com/compose/compose-file/#/volumes-volume-driver montre différentes façons de monter les sous-répertoires Host par rapport au fichier compose.

Par exemple:

volumes: # Spécifiez simplement un chemin et laissez le moteur créer un volume -/var/lib/mysql

# Spécifiez un mappage de chemin absolu -/opt/data:/var/lib/mysql

# Chemin sur l'hôte, par rapport au fichier Compose - ./cache:/tmp/cache

# Chemin relatif à l'utilisateur - ~/configs:/etc/configs /: ro

# Volume nommé - volume de données:/var/lib/mysql

Est-il possible de monter un sous-répertoire d'un volume nommé à un emplacement spécifique? Par exemple quelque chose comme ci-dessous, que j'ai essayé, mais qui ne semble pas fonctionner.

# Named volume
  - datavolume/sql_data:/var/lib/mysql

Je suppose que je pourrais être en mesure de gérer cela en montant le volume de données à un emplacement comme /data puis dans les Dockerfiles de chaque conteneur, créez des liens symboliques à partir des sous-répertoires vers les emplacements.

par exemple dans un fichier docker-compose.yml

volumes:
  - datavolume:/data

puis dans le conteneur Dockerfile

RUN ln -s /data/sql_data /var/lib/mysql

J'ai commencé à emprunter cette voie mais cela devenait désordonné et ne fonctionnait pas. Avant d'abandonner cette approche ou d'investir du temps à la déboguer, je voulais m'assurer qu'il n'y avait aucun moyen de simplement spécifier les sous-répertoires d'un vollume nommé.

23
nPn

Non car compose/config/config.py#load(config_details) vérifier si datavolume/sql_data Correspond à un volume nommé (dans compose/config/validation.py#match_named_volumes() )

datavolume le ferait, datavolume/sql_data ne le serait pas.

Comme memetech le souligne dans les commentaires , c'est un problème de suivi depuis avril 2017:
moby/moby Problème 32582 : " [fonctionnalité] Autoriser le montage de sous-répertoires de volumes nommés ".

25
VonC