8

我尝试使用 elasticsearch 容器编写测试。我使用https://www.testcontainers.org/库运行它。这是我的配置:

@ClassRule
public static GenericContainer elasticContainer =
        new GenericContainer("docker.elastic.co/elasticsearch/elasticsearch:5.3.0")
                .withExposedPorts(9300, 9200)
                .withEnv("xpack.security.enabled", "false")
                .withEnv("transport.host", "127.0.0.1")
                .withEnv("http.host", "0.0.0.0");

我有一个例外:

org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{9fuJUZYWS6O6IgLGOgJDaA}{localhost}{127.0.0.1:32792}]

我为测试重新配置了我的端口,并且 9200 端口可用(在由 testcontainers 映射的端口上) - 我通过 curl 检查了它。但9300不是。

有人知道如何解决传输主机问题吗?

4

2 回答 2

9

问题在于弹性搜索容器 - 而不是 testcontainers lib。

我在这里找到了解决方案 https://github.com/olivere/elastic/issues/57#issuecomment-88697714

传输客户端无法解析容器中的 ElasticSearch 节点。

最终代码是:

@ClassRule
public static GenericContainer elasticContainer =
        new FixedHostPortGenericContainer("docker.elastic.co/elasticsearch/elasticsearch:5.3.0")
                .withFixedExposedPort(9200, 9200)
                .withFixedExposedPort(9300, 9300)
                .waitingFor(Wait.forHttp("/")) // Wait until elastic start
                .withEnv("xpack.security.enabled", "false")
                .withEnv("network.host", "_site_")
                .withEnv("network.publish_host", "_local_");

此外,如果您只想在 docker 中启动 ElasticSearch 并使用 9300(传输端口),请运行以下命令:

docker run  -p 9300:9300 -p 9200:9200 -e "xpack.security.enabled=false"  -e "network.host=_site_" -e "network.publish_host=_local_"  docker.elastic.co/elasticsearch/elasticsearch:5.3.0
于 2017-04-13T12:50:48.530 回答
9

对于现在提出这个问题的任何人,请注意,从 Testcontainers 1.10.1 开始,我们将 Elasticsearch 作为 Testcontainers 库中的官方模块。希望你会发现这比使用 '滚动你自己' 容易得多GenericContainer

用法在此处记录。

于 2018-11-13T09:26:42.660 回答