我希望使用Docker Build将初始数据输入到Elasticsearch中 🐳

首先

“啊,错了…”
“得重来了…”
“得重新启动容器,重新输入初始数据…”
在开发中使用Elasticsearch经常会出现这种情况。

让我给你一个有趣的小提示吧,为了在使用Docker开发环境中使用Elasticsearch,我们可以预先注入一些初始数据。

环境

    • macOS Catalina

 

    • docker desktop 2.5.0.1

 

    • Elasticsearch 7.10

 

    kibana 7.10 (おまけ)

数据样本

我們將從Elasticsearch中提取莎士比亞的數據。

加载样本数据 | Kibana指南 [7.1] | Elastic

– 溪水流动

在Dockerfile中插入数据。

    1. 将JSON文件复制过来

 

    1. 将wait-for-it.sh复制过来

 

    等待Elasticsearch启动,并使用批量方式插入数据

是的。

等待-直到.sh 是一个监视服务启动的shell脚本。它也在Docker的官方文档中提到。

在Compose中控制启动和关闭顺序 | Docker文档

这些文件

我已在 GitHub 上放置了文件:jrfk/docker-es-entry-initial-data。

Dockerfile 中华多克文件

大致上是这样的感觉。


FROM docker.elastic.co/elasticsearch/elasticsearch:7.10.0

## data
RUN mkdir /data && chown -R elasticsearch:elasticsearch /data
COPY ./data/ /data/
RUN chmod 755 /data/*

## wait-for-it
ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /utils/wait-for-it.sh
RUN chown -R elasticsearch:elasticsearch /utils/wait-for-it.sh && chmod 755 /utils/wait-for-it.sh

## RUN
RUN echo 'discovery.type: single-node' >> config/elasticsearch.yml
RUN /usr/local/bin/docker-entrypoint.sh elasticsearch -p /tmp/epid & /bin/bash /utils/wait-for-it.sh -t 0 localhost:9200 -- /data/es_init.sh; kill $(cat /tmp/epid) && wait $(cat /tmp/epid); exit 0;

运行命令echo ‘discovery.type: single-node’ >> config/elasticsearch.yml。
但是,从第7代Elasticsearch开始,必须指定节点。
由于是开发环境,让我们尝试使用single-node。

开始

让我们来执行以下命令。

docker-compose build  
docker-compose up -d

确定

我想您应该能确认数据已经输入!

image.png

原材料

在 Stack Overflow 上有一个原始的参考。
如果继续这样做,会出现这样的错误并无法启动。

ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/docker-cluster.log

由于第7代ElasticSearch在启动时需要指定节点,所以是必需的。

如何在Docker构建中添加一个elasticsearch索引 – Stack Overflow

广告
将在 10 秒后关闭
bannerAds