diff --git a/extensions/devservices/postgresql/src/main/java/io/quarkus/devservices/postgresql/deployment/PostgresqlDevServicesProcessor.java b/extensions/devservices/postgresql/src/main/java/io/quarkus/devservices/postgresql/deployment/PostgresqlDevServicesProcessor.java index abdd0425a0de4..af09e7e9fc499 100644 --- a/extensions/devservices/postgresql/src/main/java/io/quarkus/devservices/postgresql/deployment/PostgresqlDevServicesProcessor.java +++ b/extensions/devservices/postgresql/src/main/java/io/quarkus/devservices/postgresql/deployment/PostgresqlDevServicesProcessor.java @@ -12,7 +12,8 @@ import org.jboss.logging.Logger; import org.testcontainers.containers.PostgreSQLContainer; -import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.containers.wait.strategy.WaitAllStrategy; import org.testcontainers.utility.DockerImageName; import io.quarkus.datasource.common.runtime.DataSourceUtil; @@ -99,16 +100,21 @@ public QuarkusPostgreSQLContainer(Optional imageName, OptionalInt fixedE super(DockerImageName .parse(imageName.orElseGet(() -> ConfigureUtil.getDefaultImageNameFor("postgresql"))) .asCompatibleSubstituteFor(DockerImageName.parse(PostgreSQLContainer.IMAGE))); + this.fixedExposedPort = fixedExposedPort; this.useSharedNetwork = useSharedNetwork; + // Workaround for https://github.com/testcontainers/testcontainers-java/issues/4799. // The motivation of this custom wait strategy is that Testcontainers fails to start a Postgresql database when it // has been already initialized. // This custom wait strategy will work fine regardless of the state of the Postgresql database. // More information in the issue ticket in Testcontainers. - this.waitStrategy = new LogMessageWaitStrategy() - .withRegEx("(" + READY_REGEX + ")?(" + SKIPPING_INITIALIZATION_REGEX + ")?") - .withTimes(2) + + // Added Wait.forListeningPort() for https://github.com/quarkusio/quarkus/issues/25682 + // as suggested by https://github.com/testcontainers/testcontainers-java/pull/6309 + this.waitStrategy = new WaitAllStrategy() + .withStrategy(Wait.forLogMessage("(" + READY_REGEX + ")?(" + SKIPPING_INITIALIZATION_REGEX + ")?", 2)) + .withStrategy(Wait.forListeningPort()) .withStartupTimeout(Duration.of(60L, ChronoUnit.SECONDS)); }