diff --git a/core/src/main/java/org/testcontainers/dockerclient/DockerClientConfigUtils.java b/core/src/main/java/org/testcontainers/dockerclient/DockerClientConfigUtils.java index 7206a7e1452..08899ee4f26 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/DockerClientConfigUtils.java +++ b/core/src/main/java/org/testcontainers/dockerclient/DockerClientConfigUtils.java @@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.testcontainers.DockerClientFactory; +import org.testcontainers.utility.TestcontainersConfiguration; import java.io.File; import java.net.URI; @@ -17,32 +18,45 @@ public class DockerClientConfigUtils { public static final boolean IN_A_CONTAINER = new File("/.dockerenv").exists(); @Getter(lazy = true) - private static final Optional defaultGateway = Optional - .ofNullable( - DockerClientFactory - .instance() - .runInsideDocker( - cmd -> cmd.withCmd("sh", "-c", "ip route|awk '/default/ { print $3 }'"), - (client, id) -> { - try { - LogToStringContainerCallback loggingCallback = new LogToStringContainerCallback(); - client - .logContainerCmd(id) - .withStdOut(true) - .withFollowStream(true) - .exec(loggingCallback) - .awaitStarted(); - loggingCallback.awaitCompletion(3, TimeUnit.SECONDS); - return loggingCallback.toString(); - } catch (Exception e) { - log.warn("Can't parse the default gateway IP", e); - return null; - } - } + private static final Optional defaultGateway = resolveDefaultGateway(); + + static Optional resolveDefaultGateway() { + if (TestcontainersConfiguration.getInstance().isDisableChecks()) { + log.debug("Checks are disabled, skipping default gateway detection"); + return Optional.empty(); + } + try { + return Optional + .ofNullable( + DockerClientFactory + .instance() + .runInsideDocker( + cmd -> cmd.withCmd("sh", "-c", "ip route|awk '/default/ { print $3 }'"), + (client, id) -> { + try { + LogToStringContainerCallback loggingCallback = new LogToStringContainerCallback(); + client + .logContainerCmd(id) + .withStdOut(true) + .withFollowStream(true) + .exec(loggingCallback) + .awaitStarted(); + loggingCallback.awaitCompletion(3, TimeUnit.SECONDS); + return loggingCallback.toString(); + } catch (Exception e) { + log.warn("Can't parse the default gateway IP", e); + return null; + } + } + ) ) - ) - .map(StringUtils::trimToEmpty) - .filter(StringUtils::isNotBlank); + .map(StringUtils::trimToEmpty) + .filter(StringUtils::isNotBlank); + } catch (Exception e) { + log.warn("Can't detect the default gateway", e); + return Optional.empty(); + } + } /** * @deprecated use {@link DockerClientProviderStrategy#getDockerHostIpAddress()} diff --git a/core/src/test/java/org/testcontainers/dockerclient/DockerClientConfigUtilsTest.java b/core/src/test/java/org/testcontainers/dockerclient/DockerClientConfigUtilsTest.java index f3bc15d2c22..4a649cee1bd 100644 --- a/core/src/test/java/org/testcontainers/dockerclient/DockerClientConfigUtilsTest.java +++ b/core/src/test/java/org/testcontainers/dockerclient/DockerClientConfigUtilsTest.java @@ -4,12 +4,17 @@ import org.assertj.core.api.Assumptions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; import org.testcontainers.DockerClientFactory; +import org.testcontainers.utility.MockTestcontainersConfigurationExtension; +import org.testcontainers.utility.TestcontainersConfiguration; import java.net.URI; import static org.assertj.core.api.Assertions.assertThat; +@ExtendWith(MockTestcontainersConfigurationExtension.class) class DockerClientConfigUtilsTest { DockerClient client = DockerClientFactory.lazyClient(); @@ -61,4 +66,12 @@ void getDockerHostIpAddressShouldReturnNullWhenUnsupportedUriScheme() { void getDefaultGateway() { assertThat(DockerClientConfigUtils.getDefaultGateway()).isNotNull(); } + + @Test + @Timeout(5) + void resolveDefaultGatewayShouldNotRunContainerWhenChecksAreDisabled() { + Mockito.doReturn(true).when(TestcontainersConfiguration.getInstance()).isDisableChecks(); + + assertThat(DockerClientConfigUtils.resolveDefaultGateway()).isEmpty(); + } }