将自定义 Dockerfile 与 JUnit 测试容器一起用于 OpenSearch

问题描述 投票:0回答:1

我正在尝试使用 Kotlin 中的 OpenSearch 的 JUnit 测试容器和 Spring Boot 框架。 (足够的限定符?)我已经能够让它大部分工作,大致如下:

class TestConfiguration : ApplicationContextInitializer<ConfigurableApplicationContext> {
    val container = OpensearchContainer(
        DockerImageName.parse("opensearchproject/opensearch:2.11.1")
    )


    override fun initialize(applicationContext: ConfigurableApplicationContext) {
        container.start()

        TestPropertySourceUtils.addInlinedPropertiesToEnvironment(
            applicationContext,
            "opensearch.username=${container.getUsername()}",
            "opensearch.password=${container.getPassword()}",
            "opensearch.host=${container.getHost()}",
            "opensearch.scheme=http",
            "opensearch.port=${container.getFirstMappedPort()}",
        )
    }
}

(也就是说,我们启动容器,然后将用户/通行证/主机/端口从中取出,并将其粘贴到属性中,以便 OpenSearch 客户端获取这些属性并连接到测试容器实例。)

上面的内容似乎确实按预期工作。 但是,我不想使用普通的上游 OpenSearch 图像。 我需要安装一个 OpenSearch 插件,这意味着我有一个自定义的

Dockerfile
,如下所示:

FROM opensearchproject/opensearch:2.11.1
RUN bin/opensearch-plugin install analysis-phonetic

当我从

docker-compose.yml
引用它时效果非常好。 然而,我一生都无法弄清楚如何让测试容器使用自定义
Dockerfile
。 这似乎在一定程度上是
OpenSearchContainer
类的问题,实际上除了
DockerImageName
实例之外不允许任何东西作为参数,尽管它的父级
GenericContainer
支持更多。 但不使用
OpenSearchContainer
意味着我无权访问用户或密码;尽管查看类,它们只是硬编码的常量。

ImageFromDockerfile
(参见:https://java.testcontainers.org/features/creating_images/),不过这似乎只适用于
GenericContainer
,不适用于
OpenSearchContainer

我尝试使用

DockerComposeContainer
支持(参见:https://codeal.medium.com/how-to-run-docker-compose-with-testcontainers-7d1ba73afeeb),但我不断收到错误无法解密尝试引用
docker-compose.yml
文件。 如果我尝试将文件名包装在
File
实例中,它就会崩溃。 如果我不这样做,那么它会运行,但似乎找不到该文件,因此不会加载任何内容。

有人成功做到过吗? 知道我该怎么做吗?

谢谢。

docker kotlin junit opensearch testcontainers
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.