Java 带弹簧执行器的试验容器

Java 带弹簧执行器的试验容器,java,spring-boot,docker,testcontainers,Java,Spring Boot,Docker,Testcontainers,我想在网络上运行带有testcontainers的容器。My containers包含一个spring应用程序,它有一个执行器端点来表示其状态,它处于打开状态: /actuator/health 我的容器如下所示: private final static Network network = Network.newNetwork(); private static final GenericContainer<?> myContainer = new GenericContain

我想在网络上运行带有testcontainers的容器。My containers包含一个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());
但是如果我卷曲这个url(在这个例子中:
https://localhost:33092/actuator/health
)在容器内的应用程序启动后,但我正在等待评估,我得到如下结果:

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

我错过了什么?有什么想法吗?这是一个bug吗?

好的,所以您必须分解问题

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

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
没有别的,我是从网上下载的

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


我现在真的没有一个直接的猜测在你的情况下发生了什么,但是你必须一层一层地分解你的问题(摆脱tls、网络等),或者用最简单的图像从头开始构建它,然后一个接一个地添加功能。

。使用ExposedPorts(8443)它应该是33092吗?没有tls它能工作吗?没有自定义网络?@FabienMIFSUD No,传递给.withExposedPorts()的参数是容器内的端口。在主机上,Testcontainers将其映射到随机端口,据我所知,在本例中,随机端口恰好是33092。如果你感兴趣-@VitalyChura不,很遗憾,没有TLS它就不起作用。自定义网络是必需的,因为它依赖于其他容器。暴露的端口将映射到localhost:33092。端口号是一个随机未使用的端口,因此无法公开它。我仍然不明白,我怎么能从外部调用它,并完美地工作,但这不是它。
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
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();
    }
}
~  curl http://localhost:32776/actuator/health
{"status":"UP"}⏎