Docker绑定app文件夹中的elasticsearch卷

时间:2018-09-17 17:56:00

标签: docker elasticsearch docker-compose

我有以下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 

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

2 个答案:

答案 0 :(得分: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:

答案 1 :(得分:0)

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

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