当我意识到我对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上运行。