社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

infojunkie

infojunkie 最近回复了
5 年前
回复了 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上运行。