如何在Docker构建期间添加Elasticsearch索引
我使用了官方的elasticsearch docker镜像,想知道在构建自定义索引时如何也可以包括在内,以便在启动容器时该索引已经存在。
我的尝试是将以下行添加到我的dockerfile中:
RUN curl -XPUT 'http://127.0.0.1:9200/myindex' -d @index.json
我收到以下错误:
0curl: (7) Failed to connect to 127.0.0.1 port 9200: Connection refused
我可以在构建过程中通过这样的API调用到达elasticsearch还是有完全不同的方法来实现这一点?
回答:
我有类似的问题。
我想创建一个预加载数据的docker容器(通过回购中的一些脚本和json文件)。elasticsearch内部的数据在执行期间不会改变,我想要尽可能少的构建步骤(仅理想情况下docker-
compose up -d)。
一种选择是手动执行一次,然后将elasticsearch
data文件夹(带有docker卷)存储在存储库中。但是,那时我将拥有重复的数据,并且每次数据更改时都必须手动检入新版本的数据文件夹。
回答:
- 使Elasticsearch将数据写入未在Elasticsearchs的官方dockerfile中声明为卷的文件夹中。
`RUN mkdir /data && chown -R elasticsearch:elasticsearch /data && echo
‘es.path.data: /data’ >> config/elasticsearch.yml && echo ‘path.data: /data’
config/elasticsearch.yml `
(需要使用正确的权限创建文件夹)
- 下载等待
ADD https://raw.githubusercontent.com/vishnubob/wait-for-
it/e1f115e4ca285c3c24e847c4dd4be955e0ed51c2/wait-for-it.sh /utils/wait-for-
it.sh
该脚本将等待,直到Elasticsearch运行我们的插入命令。
- 将数据插入Elasticsearch
RUN /docker-entrypoint.sh elasticsearch -p /tmp/epid & /bin/bash /utils/wait-
for-it.sh -t 0 localhost:9200 -- path/to/insert/script.sh; kill $(cat
/tmp/epid) && wait $(cat /tmp/epid); exit 0;
该命令在构建过程中启动elasticsearch,插入数据并将其放入一个RUN命令中。容器保留了原来的位置,除了elasticsearch的data文件夹已经正确初始化。
回答:
FROM elasticsearchRUN mkdir /data && chown -R elasticsearch:elasticsearch /data && echo 'es.path.data: /data' >> config/elasticsearch.yml && echo 'path.data: /data' >> config/elasticsearch.yml
ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/e1f115e4ca285c3c24e847c4dd4be955e0ed51c2/wait-for-it.sh /utils/wait-for-it.sh
# Copy the files you may need and your insert script
RUN /docker-entrypoint.sh elasticsearch -p /tmp/epid & /bin/bash /utils/wait-for-it.sh -t 0 localhost:9200 -- path/to/insert/script.sh; kill $(cat /tmp/epid) && wait $(cat /tmp/epid); exit 0;
就是这样!运行此映像时,数据库将预加载数据,索引等。
以上是 如何在Docker构建期间添加Elasticsearch索引 的全部内容, 来源链接: utcz.com/qa/421116.html