为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

扬帆大鱼 2023-09-06 15:01:07
我正在使用 testcontainers.org docker.elastic.co/elasticsearch/elasticsearch-oss:7.3.2,我想用它来测试我正在更新的插件,但我找不到在测试环境中安装它的方法。我可以尝试复制里面的文件并安装它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")但是容器已经启动并且弹性搜索已经在运行,所以插件不会被加载,所以我需要杀死它并复制它的创建方式,听起来像是很多黑客攻击。有更好的方法来做到这一点吗?
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

例如,以下代码片段对我有用:

@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);


查看完整回答
反对 回复 2023-09-06
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

对我来说这有效:


private static final String DOCKER_IMAGE = "docker.elastic.co/elasticsearch/elasticsearch:6.8.5"

private static final ElasticsearchContainer container = new ElasticsearchContainer(DOCKER_IMAGE);


static {

    container.withCreateContainerCmdModifier((cmd) -> {

        cmd.withCmd(

            "bash", "-c", "./bin/elasticsearch-plugin install analysis-icu && docker-entrypoint.sh eswrapper");


    });

    container.withStartupTimeout(Duration.ofSeconds(60));

}



@BeforeClass

public static void start() {

    container.start();

}


@AfterClass

public static void stop() {

    container.stop();

}

请注意,本示例中的 Elasticsearch 版本 6.8.5 较旧,您可能应该使用较新的版本。


查看完整回答
反对 回复 2023-09-06
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

我能够通过这种方式启动带有插件的 Elasticsearch 测试容器(这是 Kotlin 代码):


ElasticsearchContainer("docker.elastic.co/elasticsearch/elasticsearch:7.10.0").apply {

    withCreateContainerCmdModifier { cmd ->

        cmd.withCmd(

            *arrayOf(

                "bash",

                "-c",

                """/usr/share/elasticsearch/bin/elasticsearch-plugin install <URL> &&

                   su elasticsearch -s /usr/share/elasticsearch/bin/elasticsearch

                """.trimIndent()

            )

        )

    }

    start()

}


查看完整回答
反对 回复 2023-09-06
  • 3 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信