gpt4 book ai didi

java - 带有 Spring 执行器的测试容器

转载 作者:行者123 更新时间:2023-12-05 06:56:25 24 4
gpt4 key购买 nike

我想在网络上运行一个带有测试容器的容器。我的容器包含一个 spring 应用程序,它有一个执行器端点来表达它的状态,它是:

/actuator/health

我的容器如下所示:

private final static Network network = Network.newNetwork();

private static final GenericContainer<?> myContainer = new GenericContainer<>("mycontainer:latest")
.withExposedPorts(8443)
.withNetwork(network)
.withNetworkAliases("myContainer")
.withClasspathResourceMapping("certs", "/app/certs", BindMode.READ_ONLY)
.withClasspathResourceMapping("config", "/app/config", BindMode.READ_ONLY)
.withLogConsumer(new Slf4jLogConsumer(log))
.waitingFor(Wait.forHttp("/actuator/health").usingTls());

但是当我启动这个容器时,我得到以下错误:

Caused by: org.testcontainers.containers.ContainerLaunchException: Timed out waiting for URL to be accessible (https://localhost:33092/actuator/health should return HTTP [200])
at org.testcontainers.containers.wait.strategy.HttpWaitStrategy.waitUntilReady(HttpWaitStrategy.java:214)
at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:35)
at org.testcontainers.containers.GenericContainer.waitUntilContainerStarted(GenericContainer.java:890)
at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:441)
... 68 more

但是如果我在容器内的应用程序启动但我正在等待评估时 curl 这个 url(在这个例子中:https://localhost:33092/actuator/health),我得到这样的东西:

HTTP Status Code: 200
{
"status": "UP"
}

我错过了什么?有任何想法吗?是错误吗?

最佳答案

好的,所以你必须分解问题。

我刚刚构建了一个带有依赖项的示例 Spring Boot 应用程序并将其打包到一个图像中:

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'

没别的,我是从https://start.spring.io/下载的

下面的测试类有效(我以你的代码为例):

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
import org.testcontainers.containers.wait.strategy.Wait;

@Slf4j
public class TestcontainersWithSpringActuator {

private static final GenericContainer<?> myContainer = new GenericContainer<>("docker.io/vcvitaly/test_sb:latest")
.withExposedPorts(8080)
.withNetworkAliases("myContainer")
.withLogConsumer(new Slf4jLogConsumer(log))
.waitingFor(Wait.forHttp("/actuator/health"));

@Test
void name() {
myContainer.start();
System.out.println();
}
}

我也可以在 System.out.println 上休息一下,当它暂停时 curl 也可以工作

~  curl http://localhost:32776/actuator/health
{"status":"UP"}⏎

我现在真的不能直接猜测你的情况发生了什么,但你必须逐层分解你的问题(摆脱 tls、网络等)或从头开始构建它最简单的图像并逐一添加特征。

关于java - 带有 Spring 执行器的测试容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65143023/

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