web-dev-qa-db-fra.com

Docker-compose.yml Syntaxe des volumes nommés

Quel est le docker-compose.yml syntaxe pour spécifier le chemin d'hôte d'un volume nommé?

docker-compose.yml:

volumes:
  myvolume:  # how do I specify path here?
  othervolume:

services: # etc...

J'ai vérifié le docs , mais je ne le trouve pas. Honnêtement, je ne sais pas comment quelqu'un utilise ce genre de choses.

6
Petrus Theron

Le scénario courant avec les volumes de composition consiste à utiliser le volume nommé par défaut qui correspond au pilote de volume local et place les volumes dans/var/lib/docker/volumes. Ce n'est pas ce que vous recherchez, mais c'est l'option facile pour beaucoup:

version: '3'
volumes:
  myvolume:
  othervolume:    
services:
  myservice:
    volumes:
      - myvolume:/volume/path

La méthode courante pour mapper un volume hôte est de spécifier directement le chemin, aucun nom n'est requis sur le volume. Encore une fois, ce n'est pas ce que vous demandez, mais c'est très facile à mettre en œuvre. Il s'agit d'un support de fixation sous les couvertures:

version: '3'
services:
  myservice:
    volumes:
      - ./path:/volume/path

Si vous voulez un volume nommé et un volume hôte ensemble, ce que vous recherchez est un volume nommé configuré pour utiliser un montage de liaison. Cela a l'inconvénient d'échouer si le répertoire ne préexiste pas, mais a l'avantage que docker peut initier un répertoire vide au contenu de l'image.

version: '3'
volumes:
  myvolume:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /Host/path/to/volume
services:
  myservice:
    volumes:
      - myvolume:/container/volume/path

Remarque, l'inconvénient des montages de liaison est qu'il place les fichiers gérés par des conteneurs, avec l'uid/gid du conteneur, à l'intérieur d'un chemin probablement utilisé par d'autres utilisateurs sur l'hôte, souvent avec un uid/gid différent sur l'hôte. Le résultat est des problèmes d'autorisation sur l'hôte ou à l'intérieur du conteneur. Vous devez aligner les uid/gid entre les deux pour éviter cela.

2
BMitch

Dans les mêmes documents de référence, vous pouvez vérifier la version complète développée de l'exemple docker-compose.yml

https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples

Voir la section db pour le montage de volume nommé.

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]
0
fly2matrix