gpt4 book ai didi

java - 使用 testcontainers 使用自定义端口运行 ES docker 镜像

转载 作者:行者123 更新时间:2023-12-02 18:26:30 24 4
gpt4 key购买 nike

我想运行一个通过 Docker 运行 ES 镜像的容器测试。
经过一番研究,我发现 https://www.testcontainers.org/他们还有一个内置的 ES module .

因为我的开发环境在端口 9200 和 9300 中使用 ES,所以我更喜欢使用其他端口进行测试,比如 1200 和 1300。
因此,要从 CLI 运行 docker 镜像,我使用以下命令:
docker run -p 1200:9200 -p 1300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2
我尝试用 testcontainers 来做,例如:

static ElasticsearchContainer esContainer =
new ElasticsearchContainer("docker.elastic.co/elasticsearch/elasticsearch:7.6.2")
.withExposedPorts(1200, 9200)
.withExposedPorts(1300, 9300)
.withEnv("discovery.type", "single-node");
// .waitingFor(Wait.forHttp("/")); // Wait until elastic start – cause an error

@BeforeClass
public static void initEsDockerImage() {
esContainer.start();
esContainer.isRunning();
}

esContainer.isRunning() 中的断点:

端口是 32384 , 运行 esContainer.getHttpHostAddress()返回 localhost/127.0.0.1:32847 以及来自 docker 仪表板:
不管怎样, 无法与两者建立 ES 连接 (1200 和 32384)。

使用 **waitingFor** 运行 start() 行命令抛出 Container startup failed错误

另一个问题, 我如何知道架构 (http 或 https)在测试容器中?

最佳答案

如果你想指定一个端口而不是使用随机端口,你可以这样做:

static final MySQLContainer<?> mysql =
new MySQLContainer<>("mysql:5.6")
.withExposedPorts(34343)
.withCreateContainerCmdModifier(cmd -> cmd.withHostConfig(
new HostConfig().withPortBindings(new PortBinding(Ports.Binding.bindPort(34343), new ExposedPort(3306)))
));

关于java - 使用 testcontainers 使用自定义端口运行 ES docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61913787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com