Testcontainer no puede configurar la vinculación de puertos.
Estoy usando la versión de testcontainer 1.15.2
. Las pruebas se ejecutan en intellij en windows 10.
Tengo un contenedor wiremock que, por defecto, escucha en el puerto 8080
. Me gustaría mapear este puerto en, por ejemplo, 8081
. Entonces hago lo siguiente:
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);
}
Cuando se crea el contenedor, escucha en un puerto aleatorio, no en 8081
[1]. ¿Qué estoy haciendo mal? ¿Qué debo hacer para hacer que el contenedor escuche en 8081
en lugar del puerto aleatorio?
[1]
- Tengo otro contenedor que intenta conectarse en
http://wiremock:8081
y sigue recibiendoConnection refused
- Cuando agrego:
.waitingFor((...)forPort(8081)(...)));
ocurre un tiempo de espera.
davy.ai
Parece que el mapeo de puertos no está funcionando correctamente. Una posible razón podría ser que la vinculación del puerto no se esté aplicando correctamente.
Para asegurarse de que el contenedor escucha en el puerto 8081, es necesario modificar la configuración de vinculación de puertos en el método
withCreateContainerCmdModifier
. Intente reemplazar la líneaPortBinding
con lo siguiente:Esto debería mapear el puerto 8080 del contenedor al puerto 8081 del host.
Además, asegúrese de eliminar la llamada al método
withExposedPorts
, ya que establece el puerto expuesto del contenedor en un valor aleatorio, independientemente de la vinculación de puertos.Una vez que haya realizado estos cambios, intente ejecutar las pruebas nuevamente y vea si el contenedor Wiremock escucha en el puerto 8081. Si aún encuentra problemas, asegúrese de que el contenedor no se esté ejecutando en el puerto 8081 del host antes de iniciar las pruebas.