From 0ad0614e3d7ce2e4209a5a64eaa8c656c6ce987d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 11 Dec 2025 10:31:24 -0600 Subject: [PATCH] Fix compatibility with older Docker Engines by falling back to v1.32 Previously, minimum Docker API version was raised to v1.44 to keep compatibility with most recent Docker Enginer API. This commit introduces a fallback to API v1.32, which was used before. Fixes #11232 --- .../DockerClientProviderStrategy.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java index e16beeb6614..7b0aaafc169 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java +++ b/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java @@ -401,21 +401,34 @@ public static DockerClient getClientForConfig(TransportConfig transportConfig) { throw new IllegalArgumentException("Unknown transport type '" + transportType + "'"); } - DefaultDockerClientConfig.Builder configBuilder = DefaultDockerClientConfig.createDefaultConfigBuilder(); + DefaultDockerClientConfig.Builder configBuilder = DefaultDockerClientConfig + .createDefaultConfigBuilder() + .withDockerHost(transportConfig.getDockerHost().toString()); - if (configBuilder.build().getApiVersion() == RemoteApiVersion.UNKNOWN_VERSION) { - configBuilder.withApiVersion(RemoteApiVersion.VERSION_1_44); - } Map headers = new HashMap<>(); headers.put("x-tc-sid", DockerClientFactory.SESSION_ID); headers.put("User-Agent", String.format("tc-java/%s", DockerClientFactory.TESTCONTAINERS_VERSION)); - return DockerClientImpl.getInstance( - new AuthDelegatingDockerClientConfig( - configBuilder.withDockerHost(transportConfig.getDockerHost().toString()).build() - ), - new HeadersAddingDockerHttpClient(dockerHttpClient, headers) - ); + try { + if (configBuilder.build().getApiVersion() == RemoteApiVersion.UNKNOWN_VERSION) { + configBuilder.withApiVersion(RemoteApiVersion.VERSION_1_44); + } + DockerClient client = DockerClientImpl.getInstance( + new AuthDelegatingDockerClientConfig(configBuilder.build()), + new HeadersAddingDockerHttpClient(dockerHttpClient, headers) + ); + log.debug("Pinging Docker API version 1.44."); + client.pingCmd().exec(); + return client; + } catch (Exception ex) { + log.debug("Fallback to Docker API version 1.32."); + return DockerClientImpl.getInstance( + new AuthDelegatingDockerClientConfig( + configBuilder.withApiVersion(RemoteApiVersion.VERSION_1_32).build() + ), + new HeadersAddingDockerHttpClient(dockerHttpClient, headers) + ); + } } public synchronized String getDockerHostIpAddress() {