Docker绑定app文件夹中的elasticsearch卷

问题描述 投票:1回答:2

我有以下docker-compose文件:

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:

(为清楚起见,我删除了其他服务)我可以在/ var / lib / docker / volumes / project_name_esdata中看到卷但我希望能够在docker-compose.yml所在的目录中创建卷,但我没有'找到一种方法。

受到How to set a path on host for a named volume in docker-compose.yml的启发,我试过了

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: './' 

但这会引发以下异常:

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

请告诉我是否应该发布完整的堆栈跟踪或任何其他相关信息。

docker elasticsearch docker-compose
2个回答
1
投票

如果您使用./,卷将被安装在同一个文件夹中(之前我已经遇到了权限问题,所以你知道)

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:

0
投票

您的配置几乎没问题,但您需要使用绝对路径,因为device: ./导致挂载根文件系统而不是当前目录(这就是您拒绝访问的原因)

device: /opt/your-project/data等设备中使用绝对路径 - 请注意,目录必须在使用前存在。

© www.soinside.com 2019 - 2024. All rights reserved.