KafkaContainer в TestContainers зависает до истечения времени ожидания с тайм-аутом, ожидающим открытия порта контейнера

Я пытаюсь запустить контейнер kafka в TestContainers. Мой код выглядит так:

import java.io.File;
import java.time.Duration;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.DockerComposeContainer;
import org.testcontainers.containers.KafkaContainer;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;

@Testcontainers
public class FirstTest {

  @Container
  public static DockerComposeContainer environment =
      new DockerComposeContainer(new File("src/test/resources/compose-test.yml"))
          .withExposedService(
              "redis_1", 6379, Wait.forListeningPort().withStartupTimeout(Duration.ofSeconds(60)));

  @Container
  public static KafkaContainer kafka =
      new KafkaContainer()
          .waitingFor(Wait.forListeningPort().withStartupTimeout(Duration.ofSeconds(360)));

  @Container public PostgreSQLContainer postgresContainer = new PostgreSQLContainer();

  @Test
  void integrationTest() {

    String redisUrl =
        environment.getServiceHost("redis_1", 6379)
            + ":"
            + environment.getServicePort("redis_1", 6379);

    String jdbcUrl = postgresContainer.getJdbcUrl();
    String username = postgresContainer.getUsername();
    String password = postgresContainer.getPassword();

    String url = kafka.getBootstrapServers();
  }
}

Когда я запускаю этот код, поток зависает в рабочем состоянии, пока я не получу исключение тайм-аута:

Caused by: org.testcontainers.containers.ContainerLaunchException: Timed out waiting for container port to open (localhost ports: [32937, 32939] should be listening)

Хочу отметить, что без kafkaContainer все работает как положено. Я могу успешно запустить контейнеры Redis и Postgres.

Это версия kafkaContainer, которую я использую:

<dependency>
      <groupId>org.testcontainers</groupId>
      <artifactId>kafka</artifactId>
      <version>1.14.3</version>
      <scope>test</scope>
 </dependency>


person ioan tinca    schedule 22.10.2020    source источник


Ответы (1)


Из того, что я вижу в исходном коде, waitingFor(Wait.forListeningPort()) будет работать только в том случае, если вы ранее открыли некоторые порты. (Хотя я не уверен на 100%.)

Что, если вы просто создадите контейнер Kafka без вызова waitingFor()?

person Vitaly Chura    schedule 23.10.2020