I'm using testcontainer version 1.15.2
. Tests are run in intellij on windows 10.
I have a wiremock container. By default it listens on the port 8080
. I would like to map this port to let's say 8081
. So I do:
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);
}
When the container is created it listens on the random port, not the 8081
[1]. What am I doing wrong ? What should I do to make the container listen on 8081
instead of the random port ?
[1]
- I have another container that tries to connect on
http://wiremock:8081
and keep gettingConnection refused
- When I add:
.waitingFor((...)forPort(8081)(...)));
timeout occurs.
CodePudding user response:
You cannot choose which actual port is used on the host machine. TestContainers chooses one automatically and makes it accessible through getMappedPort(containerPort)
method on the container instance. You can also use getFirstMappedPort()
if you only have one.
Integer hostPort = container.getMappedPort(8080);
Integer hostPort = container.getFirstMappedPort();