当前位置: 首页 > 面试题库 >

如何在Docker构建期间添加Elasticsearch索引

谢运良
2023-03-14
问题内容

我使用了官方的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卷)存储在存储库中。但是,那时我将拥有重复的数据,并且每次数据更改时都必须手动检入新版本的数据文件夹。

解决方案

  1. 使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 `

(需要使用正确的权限创建文件夹)

  1. 下载等待

ADD https://raw.githubusercontent.com/vishnubob/wait-for- it/e1f115e4ca285c3c24e847c4dd4be955e0ed51c2/wait-for-it.sh /utils/wait-for- it.sh

该脚本将等待,直到Elasticsearch运行我们的插入命令。

  1. 将数据插入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 elasticsearch

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

# 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容器中的环境变量,但没有成功。使用运行命令时设置它们有效,但我需要在构建过程中设置它们。 Dockerfile文件 我用来构建的命令 运行 我正在检查可用的环境变量,通过使用 结果是 TEST_ENV不在场

  • 我有这个小问题...当我在我的网站上搜索任何内容时,结果会在键入时异步显示...独奏如果我要求的单词有类似我不知道的东西...100个结果,所有结果都会出现,页面的滚动会太长,所以我需要一些按钮,允许我10 x 10(或类似的东西)加载结果 这是我到目前为止所做的代码。。。 HTML: PHP: JS公司: 但我还不能让它正常工作。。。因为ok;我搜索了一些东西,我得到了前10个结果,但是。。。当

  • 我需要在我的AOSP构建中添加一些第三方APK。我应该在哪个文件夹中保存这些APK,以便在构建代码和创建映像时将其安装在仿真程序中? 看起来系统应用程序被保存在包/应用程序文件夹中,所以我需要知道第三方应用程序被保存在哪里。

  • 我的公司刚刚更新了我们的安全性,现在我们需要添加自定义证书文件的使用。我的本地docker构建现在无法在构建期间下载包。要解决此问题,我需要在docker构建中使用证书文件。 如果我尝试在本文末尾使用 Dockerfile 构建映像,我会收到以下错误,指示权限被拒绝,因为它需要证书 - 如果我注释掉< code>RUN apk update 我也尝试过使用ENV和ARG,但运气不佳。 如果我像这样

  • 问题内容: 我每天创建索引来存储搜索历史,并且我将这些索引用于应用程序中的建议,这也有助于我根据历史建议。 现在我只需要维持过去的10天历史。那么elasticsearch中是否有任何功能可以让我定期创建和删除索引? 问题答案: 我唯一能想到的就是使用数据数学:https : //www.elastic.co/guide/en/elasticsearch/reference/current/dat

  • 问题内容: 我正在尝试在构建期间在Docker容器中设置环境变量,但没有成功。使用run命令设置它们可以工作,但是我需要在构建期间进行设置。 Docker文件 我正在使用的命令 跑步 我正在通过检查可用的环境变量 结果是 TEST_ENV不存在 问题答案: 用于设置在过程中使用的环境变量-它们不会出现在最终图像中,这就是为什么在使用时看不到它们的原因。 您使用的设置仅在构建映像时相关,而从映像运行