【问题标题】:Testcontainer cannot configure port binding测试容器无法配置端口绑定
【发布时间】:2022-01-02 05:17:57
【问题描述】:

我正在使用测试容器版本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)(...))); 发生超时。

【问题讨论】:

    标签: java spring-boot testcontainers docker-java testcontainers-junit5


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 2019-10-30
      • 2016-12-10
      • 2012-06-10
      • 2016-03-08
      相关资源
      最近更新 更多