Fil*_*ski 9 java spring-boot docker-java testcontainers testcontainers-junit5
我正在使用 testcontainer 版本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);
}
Run Code Online (Sandbox Code Playgroud)
创建容器时,它会侦听随机端口,而不是8081[1]。我究竟做错了什么 ?我应该怎么做才能让容器监听8081而不是随机端口?
[1]
http://wiremock:8081并不断获取Connection refused.waitingFor((...)forPort(8081)(...)));发生超时。jat*_*rna 14
您可以使用设置端口绑定
List<String> portBindings = new ArrayList<>();
portBindings.add("5673:5672"); // hostPort:containerPort
portBindings.add("15673:15672"); // hostPort:containerPort
container.setPortBindings(portBindings);
Run Code Online (Sandbox Code Playgroud)
您无法选择主机上使用哪个实际端口。TestContainers 自动选择一个,并使其可以通过getMappedPort(containerPort)容器实例上的方法进行访问。getFirstMappedPort()如果您只有一个,也可以使用。
Integer hostPort = container.getMappedPort(8080);
Integer hostPort = container.getFirstMappedPort();
Run Code Online (Sandbox Code Playgroud)
https://www.testcontainers.org/features/networking/