web-dev-qa-db-fra.com

Docker bind elasticsearch volume dans le dossier de l'application

J'ai le fichier docker-compose suivant:

version: "3.3"
services:    
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    environment:
      - bootstrap.memory_lock=true
      - "ES_Java_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    ports:
      - "9300:9300"
      - "9200:9200"

volumes:
  esdata:

(J'ai supprimé d'autres services pour plus de clarté) Je peux voir le volume dans/var/lib/docker/volumes/ nom_projet _ esdata mais j'aimerais pouvoir pour créer le volume dans le répertoire où se trouve le docker-compose.yml mais je n'ai trouvé aucun moyen de le faire.

Inspiré de Comment définir un chemin sur l'hôte pour un volume nommé dans docker-compose.yml , j'ai essayé

version: "3.3"
services:    
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    environment:
      - bootstrap.memory_lock=true
      - "ES_Java_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    ports:
      - "9300:9300"
      - "9200:9200"

volumes:
  esdata:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: './' 

Mais cela soulève l'exception suivante:

Caused by: Java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes 

S'il vous plaît, faites-moi savoir si je dois publier la trace complète de la pile ou toute autre information pertinente.

6
L. Faros

Votre configuration est presque correcte mais vous devez utiliser le chemin absolu comme device: ./ provoque le montage du système de fichiers racine au lieu du répertoire actuel (c'est pourquoi l'accès vous est refusé)

Utilisez un chemin absolu dans un périphérique comme device: /opt/your-project/data - veuillez également noter que le répertoire doit exister avant utilisation.

0
Jakub Bujny