私信  •  关注

infojunkie

infojunkie 最近回复了
7 年前
回复了 infojunkie 创建的主题 » Travis上的ElasticSearch Docker失败,文件夹访问被拒绝

当我意识到我对Docker卷的理解根本错误时,我解决了这个问题。我认为为了持久化数据,我需要将数据文件夹映射到本地文件系统。但实际上,所需要的只是将其映射到Docker数据量!这样做完全回避了许可问题。

在我展示解决方案之前,让我假设我研究了本地映射的用户映射问题 ./elasticsearch/data 文件夹。以下是我发现的:在Travis主机上,文件夹如下:

$ ls -la ./elasticsearch/data
total 8
drwxrwxr-x 2 travis travis 4096 Oct 20 18:21 .
drwxrwxr-x 3 travis travis 4096 Oct 20 18:21 ..
-rw-rw-r-- 1 travis travis    0 Oct 20 18:21 .gitkeep

ES容器内:

elasticsearch_1  | total 8
elasticsearch_1  | drwxrwxr-x 2          2000 2000 4096 Oct 20 18:16 .
elasticsearch_1  | drwxrwxr-x 1 elasticsearch root 4096 Sep 26 14:20 ..
elasticsearch_1  | -rw-rw-r-- 1          2000 2000    0 Oct 20 18:16 .gitkeep

在哪里? uid 2000年是东道主 travis 用户。不知道我在这一点上改变了路线之后需要做什么-除了手动 chown 东西。

对于我的案例,更好的解决方案是创建一个Docker数据容器并将其映射到ES数据文件夹。这样,我就可以在不丢失数据的情况下重建ES图像。以下是如何 docker-compose.yml 文件更改:

version: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.4.2
    ports:
      - "9200:9200"
    environment:
      - "discovery.type=single-node"
      - "transport.host=127.0.0.1"
      - "xpack.security.enabled=false"
    volumes:
      - "esdata:/usr/share/elasticsearch/data"
  kibana:
    image: docker.elastic.co/kibana/kibana:6.4.2
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    environment:
      - "ELASTICSEARCH_URL: http://elasticsearch:9200"
volumes:
  esdata:

就是这样!这个建筑现在在本地和Travis上运行。