我刚刚开始掌握Docker和docker-compose,试图为Elasticsearch创建一个开发环境,稍后我将部署它。
我一直在用
docker-elk
作为参考,我已经成功地创建了一个可用的Elasticsearch容器,将其植入种子,并在我的项目中使用。
据我所知,Docker容器不会持久化数据,除非您使用Volumes API并在容器外部创建一个卷,然后容器将访问该卷(请阅读
这里
)。
然而docker-elk只使用卷来共享一个配置的yml文件,但不知何故,当我将容器关闭再打开时,我的弹性索引仍然存在。
在docker-elk自述文件中:
存储在Elasticsearch中的数据将在容器重启后持久化,但不会在容器移除后持久化。
有人能解释一下下面配置的哪一部分是允许docker容器持久化索引的吗?
docker-compose.yml
version: '2'
services:
elasticsearch:
build:
context: build/elasticsearch/
volumes:
- ./build/elasticsearch/config.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
networks:
elk:
driver: bridgebuild/elasticsearch/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.0.0build/elasticsearch/config.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
discovery.type: single-node发布于 2017-12-06 19:48:05
正如您可能知道的,容器就是一个沙箱。它有一个文件系统,其结构与典型的linux操作系统完全相同。容器只能看到该文件系统中的那些文件和文件夹。
在容器内运行的进程将其数据和配置写入此文件系统中的文件。此进程不知道它是在容器中运行还是在VM上运行。因此,数据保存在此文件系统中的文件和文件夹中。
现在当你
删除
容器使用
这些文件将随容器一起删除,因此您将丢失数据,除非您使用在主机上备份此数据的卷。
另一方面,
停止和启动
容器不会删除容器文件,因此当您重新启动容器时,数据仍然存在。
发布于 2021-02-28 15:23:16
为了补充公认的答案,对于任何正在寻找如何持久化数据的人来说。添加问题中提到的卷。
version: '3'
services:
elasticsearch: # Elasticsearch Instance
container_name: es-search
image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
volumes: # Persist ES data in seperate "esdata" volume
- esdata:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.type=single-node
ports: # Expose Elasticsearch ports
- "9300:9300"
- "9200:9200"
volumes: # Define seperate volume for Elasticsearch data
esdata: ./my/esdata # path of your persisted data here我在这里找到了elastic docker的指南:
https://blog.patricktriest.com/text-search-docker-elasticsearch/
发布于 2019-01-08 18:50:04
中可以观察到索引及其映射
UUID
使用下面的命令。
curl 'localhost:9200/_cat/indices?v'https://stackoverflow.com/questions/47673265
复制相似问题