es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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]

  1. Tengo otro contenedor que intenta conectarse en http://wiremock:8081 y sigue recibiendo Connection refused
  2. Cuando agrego: .waitingFor((...)forPort(8081)(...))); ocurre un tiempo de espera.
Tags:  , , , ,

Answer

  1. Avatar for 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ínea PortBinding con lo siguiente:

    .withPortBindings(Ports.Binding.bindPort(8081,  new ExposedPort(8080)))
    

    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.

Comments are closed.