我希望使用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中插入数据。
-
- 将JSON文件复制过来
-
- 将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
确定
我想您应该能确认数据已经输入!
原材料
在 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