测试容器无法配置端口绑定

Testcontainer cannot configure port binding

我正在使用测试容器版本 1.15.2。 运行 在 windows 10 上的 intellij 中进行测试。 我有一个 wiremock 容器。默认情况下,它侦听端口 8080。我想将此端口映射到 8081。所以我这样做:

public WiremockContainer() {
    super("wiremock/wiremock:2.9.0-alpine");

    self()
            .waitingFor(Wait.forLogMessage(".*port:\s*8080.*", 1)
                    .withStartupTimeout(Duration.ofSeconds(25L)))
            .withCreateContainerCmdModifier(cmd -> cmd.getHostConfig()
                    .withPortBindings(new PortBinding(Ports.Binding.bindPort(8081), new ExposedPort(8080)))
            )
            .withNetworkAliases("wiremock")
            .withExposedPorts(8081);
}

创建容器时,它会侦听随机端口,而不是 8081[1]。我究竟做错了什么 ?我应该怎么做才能让容器监听 8081 而不是随机端口?

[1]

  1. 我有另一个容器尝试在 http://wiremock:8081 上连接并不断收到 Connection refused
  2. 当我添加时:.waitingFor((...)forPort(8081)(...)));超时。

您无法选择主机上实际使用的端口。 TestContainers 会自动选择一个并使其可通过容器实例上的 getMappedPort(containerPort) 方法访问。如果只有一个,也可以使用 getFirstMappedPort()

Integer hostPort = container.getMappedPort(8080);
Integer hostPort = container.getFirstMappedPort();

https://www.testcontainers.org/features/networking/