Я решил эту проблему, когда понял, что мое понимание томов докеров в корне неверно.Я подумал, что для сохранения данных мне нужно сопоставить папку данных с локальной файловой системой.Но на самом деле все, что нужно, это сопоставить его с объемом данных докера!Это вообще обошло проблему с разрешениями.
Прежде чем я покажу решение, позвольте мне сказать, что я исследовал проблему сопоставления пользователей для локальной папки ./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
stuff.
В моем случае лучшим решением было бы создать контейнер данных докера и отобразить его наПапка данных 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.