首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >docker-elk -它是如何持久化elasticsearch索引的?

docker-elk -它是如何持久化elasticsearch索引的?
EN

Stack Overflow用户
提问于 2017-12-06 19:31:26
回答 3查看 2.9K关注 0票数 4

我刚刚开始掌握Docker和docker-compose,试图为Elasticsearch创建一个开发环境,稍后我将部署它。

我一直在用

docker-elk

作为参考,我已经成功地创建了一个可用的Elasticsearch容器,将其植入种子,并在我的项目中使用。

据我所知,Docker容器不会持久化数据,除非您使用Volumes API并在容器外部创建一个卷,然后容器将访问该卷(请阅读

这里

)。

然而docker-elk只使用卷来共享一个配置的yml文件,但不知何故,当我将容器关闭再打开时,我的弹性索引仍然存在。

在docker-elk自述文件中:

存储在Elasticsearch中的数据将在容器重启后持久化,但不会在容器移除后持久化。

有人能解释一下下面配置的哪一部分是允许docker容器持久化索引的吗?

docker-compose.yml

代码语言:javascript
运行
复制
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: bridge

build/elasticsearch/Dockerfile

代码语言:javascript
运行
复制
FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.0.0

build/elasticsearch/config.yml

代码语言:javascript
运行
复制
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
discovery.type: single-node
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-06 19:48:05

正如您可能知道的,容器就是一个沙箱。它有一个文件系统,其结构与典型的linux操作系统完全相同。容器只能看到该文件系统中的那些文件和文件夹。

在容器内运行的进程将其数据和配置写入此文件系统中的文件。此进程不知道它是在容器中运行还是在VM上运行。因此,数据保存在此文件系统中的文件和文件夹中。

现在当你

删除

容器使用

这些文件将随容器一起删除,因此您将丢失数据,除非您使用在主机上备份此数据的卷。

另一方面,

停止和启动

容器不会删除容器文件,因此当您重新启动容器时,数据仍然存在。

票数 2
EN

Stack Overflow用户

发布于 2021-02-28 15:23:16

为了补充公认的答案,对于任何正在寻找如何持久化数据的人来说。添加问题中提到的卷。

代码语言:javascript
运行
复制
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/

票数 1
EN

Stack Overflow用户

发布于 2019-01-08 18:50:04

中可以观察到索引及其映射

UUID

使用下面的命令。

代码语言:javascript
运行
复制
curl 'localhost:9200/_cat/indices?v'
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47673265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档