使用插件启动 ElasticSearch 的测试容器

Posted

技术标签:

【中文标题】使用插件启动 ElasticSearch 的测试容器【英文标题】:Start test container of ElasticSearch with plugin 【发布时间】:2020-01-27 19:44:55 【问题描述】:

我正在使用 docker.elastic.co/elasticsearch/elasticsearch-oss:7.3.2 的 testcontainers.org,我想用它来测试我正在更新的插件,但我找不到在测试环境中安装它的方法。

我可以尝试将文件复制到里面并安装它

ElasticsearchContainer container = new ElasticsearchContainer("docker.elastic.co/elasticsearch/elasticsearch-oss:$ELASTIC_VERSION")
String pluginPath = "/usr/share/elasticsearch/$PLUGIN_FILE_NAME"
container.start()
container.copyFileToContainer(MountableFile.forHostPath(new File(PLUGIN_PLUGIN_PATH).toPath()), pluginPath)
ExecResult result = container.execInContainer("bin/elasticsearch-plugin", "install", "file://$pluginPath")

但是容器已经启动并且弹性搜索已经在运行,所以插件不会被加载,所以我需要杀死它并复制它的创建方式,听起来像是很多黑客攻击。有没有更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

我使用Testcontainers Dockerfile DSL解决了这个问题

例如以下代码 sn-p 对我有用:

@ClassRule
public static GenericContainer elastic = new GenericContainer(new ImageFromDockerfile()
    .withDockerfileFromBuilder(
        builder -> builder.from("elasticsearch:6.8.4")
                          .run("bin/elasticsearch-plugin", "install", "analysis-icu")
                          .run("bin/elasticsearch-plugin", "install", "analysis-smartcn")
                          .build()
)).withExposedPorts(9200);

【讨论】:

以上是关于使用插件启动 ElasticSearch 的测试容器的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch部署安装

elasticsearch 安装

Elasticsearch数据迁移与集群容灾

Day390.-ElasticSearch入门 -ElasticSearch

ElasticSearch 安装使用

Elasticsearch