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?

28
demandé sur pvgoddijn 2016-03-07 13:23:59

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)
    
11
répondu kaiser 2018-06-12 06:39:34

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.

8
répondu dnephin 2016-03-09 17:25:26

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.

7
répondu Stas Makarov 2016-04-28 08:24:46

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é).

6
répondu rmNyro 2017-07-11 16:07:14

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
3
répondu villasv 2018-02-16 15:31:23