测试容器无法配置端口绑定
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]
- 我有另一个容器尝试在
http://wiremock:8081
上连接并不断收到 Connection refused
- 当我添加时:
.waitingFor((...)forPort(8081)(...)));
超时。
您无法选择主机上实际使用的端口。 TestContainers 会自动选择一个并使其可通过容器实例上的 getMappedPort(containerPort)
方法访问。如果只有一个,也可以使用 getFirstMappedPort()
。
Integer hostPort = container.getMappedPort(8080);
Integer hostPort = container.getFirstMappedPort();
我正在使用测试容器版本 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]
- 我有另一个容器尝试在
http://wiremock:8081
上连接并不断收到Connection refused
- 当我添加时:
.waitingFor((...)forPort(8081)(...)));
超时。
您无法选择主机上实际使用的端口。 TestContainers 会自动选择一个并使其可通过容器实例上的 getMappedPort(containerPort)
方法访问。如果只有一个,也可以使用 getFirstMappedPort()
。
Integer hostPort = container.getMappedPort(8080);
Integer hostPort = container.getFirstMappedPort();