Docker-compose le volume monté nommé
Afin de garder une trace des volumes utilisés par Docker-compose, j'aime utiliser des volumes nommés. Cela fonctionne très bien pour les volumes "normaux" comme
version: 2
services:
example-app:
volume:
-named_vol:/dir/in/container/volume
volumes:
named_vol:
Mais je ne peux pas comprendre comment le faire fonctionner lors du montage de l'hôte local. Je cherche quelque chose comme:
version: 2
services:
example-app:
volume:
-named_homedir:/dir/in/container/volume
volumes:
named_homedir: /c/Users/
Ou
version: 2
services:
example-app:
volume:
-/c/Users/:/home/dir/in/container/ --name named_homedir
Est-ce possible ou suis-je coincé avec des volumes anonymes pour ceux montés?
5 réponses
Comme vous pouvez le lire dans ce numéro GitHub, montage des volumes nommés Maintenant, c'est une chose ... depuis 1.11 ou 1.12.). les options spécifiques au pilote sont documentées. Quelques notes du fil GitHub:
docker volume create --opt type=none --opt device=<host path> --opt o=bind
Si le chemin de l'hôte n'existe pas, il ne sera pas créé.
Les Options sont transmises littéralement au montage syscall. Nous pouvons ajouter des cas spéciaux pour certains "types" parce qu'ils sont difficiles à utiliser... comme l'exemple nfs [référencé surtout].
– @cpuguy83
Pour répondre à votre question spécifique sur la façon de l'utiliser dans composer, vous écrivez sous votre section volumes
:
my-named-volume:
driver_opts:
type: none
device: /home/full/path #NOTE needs full path (~ doesn't work)
o: bind
C'est parce que comme cpuguy83 l'a écrit dans le thread GitHub lié, les options sont (sous le capot) transmises directement à la commande mount
.
EDIT: Comme commenté par...
- ...@visslav, vous pouvez utiliser
${PWD}
pour les chemins relatifs. -
...@mikeyjk, vous devrez peut-être supprimer volumes préexistants:
docker volume rm $(docker volume ls)
Les volumes hôtes sont différents des volumes nommés ou des volumes anonymes. Leur" nom " est le chemin sur l'hôte.
Il N'y a aucun moyen d'utiliser la section volumes
pour les volumes hôtes.
Je cherchais une réponse à la même question récemment et je suis tombé sur ce plugin: https://github.com/CWSpear/local-persist On dirait que cela permet exactement ce que le sujet a commencé veut faire.
Je ne l'ai pas encore essayé moi-même, mais j'ai pensé que cela pourrait être utile pour quelqu'un.
J'ai essayé la (presque) même chose et cela semble fonctionner avec quelque chose comme:
version: '2'
services:
example-app:
volume:
-named_vol:/dir/in/container/volume
-/c/Users/:/dir/in/container/volume
volumes:
named_vol:
Semble fonctionner pour moi (je n'ai pas creusé dedans, je l'ai juste testé).
OP semble déjà utiliser des chemins complets, mais si, comme la plupart des gens, vous êtes intéressé par le montage d'un dossier de projet dans le conteneur, cela pourrait aider.
Voici comment le faire avec driver_opts
comme @ Kaiser a dit et @ linuxbandit illustré. Mais vous pouvez essayer d'utiliser la variable d'environnementgénéralement disponible $PWD pour éviter de spécifier des chemins complets pour les répertoires dans le contexte docker-compose:
logs-directory:
driver_opts:
type: none
device: ${PWD}/logs
o: bind