diff --git a/core/src/main/java/org/testcontainers/DockerClientFactory.java b/core/src/main/java/org/testcontainers/DockerClientFactory.java
index 77ae311bb47..0d334f75cf6 100644
--- a/core/src/main/java/org/testcontainers/DockerClientFactory.java
+++ b/core/src/main/java/org/testcontainers/DockerClientFactory.java
@@ -164,6 +164,9 @@ public String getRemoteDockerUnixSocketPath() {
return dockerSocketOverride;
}
}
+ if (this.strategy != null && this.strategy.getRemoteDockerUnixSocketPath() != null) {
+ return this.strategy.getRemoteDockerUnixSocketPath();
+ }
URI dockerHost = getTransportConfig().getDockerHost();
String path = "unix".equals(dockerHost.getScheme()) ? dockerHost.getRawPath() : "/var/run/docker.sock";
diff --git a/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java
index 8a959b443c8..1f22eb6f85e 100644
--- a/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java
+++ b/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java
@@ -102,6 +102,13 @@ public boolean allowUserOverrides() {
return true;
}
+ /**
+ /* @return the path under which the Docker unix socket is reachable relative to the Docker daemon
+ */
+ public String getRemoteDockerUnixSocketPath() {
+ return null;
+ }
+
/**
* @return highest to lowest priority value
*/
diff --git a/core/src/main/java/org/testcontainers/dockerclient/DockerDesktopClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/DockerDesktopClientProviderStrategy.java
new file mode 100644
index 00000000000..b056733cfd2
--- /dev/null
+++ b/core/src/main/java/org/testcontainers/dockerclient/DockerDesktopClientProviderStrategy.java
@@ -0,0 +1,84 @@
+package org.testcontainers.dockerclient;
+
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.SystemUtils;
+import org.jetbrains.annotations.Nullable;
+
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Optional;
+
+/**
+ * Look at the following paths:
+ *
+ * - Linux: ~/.docker/desktop/docker.sock
+ * - MacOS: ~/.docker/run/docker.sock
+ *
+ *
+ * @deprecated this class is used by the SPI and should not be used directly
+ */
+@Slf4j
+@Deprecated
+public class DockerDesktopClientProviderStrategy extends DockerClientProviderStrategy {
+
+ public static final int PRIORITY = UnixSocketClientProviderStrategy.PRIORITY - 1;
+
+ @Getter(lazy = true)
+ @Nullable
+ private final Path socketPath = resolveSocketPath();
+
+ private Path resolveSocketPath() {
+ Path linuxPath = Paths.get(System.getProperty("user.home")).resolve(".docker").resolve("desktop");
+ return tryFolder(linuxPath)
+ .orElseGet(() -> {
+ Path macosPath = Paths.get(System.getProperty("user.home")).resolve(".docker").resolve("run");
+ return tryFolder(macosPath).orElse(null);
+ });
+ }
+
+ @Override
+ public String getDescription() {
+ return "Rootless Docker accessed via Unix socket (" + getSocketPath() + ")";
+ }
+
+ @Override
+ public TransportConfig getTransportConfig() throws InvalidConfigurationException {
+ return TransportConfig.builder().dockerHost(URI.create("unix://" + getSocketPath().toString())).build();
+ }
+
+ @Override
+ protected int getPriority() {
+ return PRIORITY;
+ }
+
+ @Override
+ protected boolean isPersistable() {
+ return false;
+ }
+
+ @Override
+ public String getRemoteDockerUnixSocketPath() {
+ return "/var/run/docker.sock";
+ }
+
+ @Override
+ protected boolean isApplicable() {
+ return (SystemUtils.IS_OS_LINUX || SystemUtils.IS_OS_MAC) && this.socketPath != null;
+ }
+
+ private Optional tryFolder(Path path) {
+ if (!Files.exists(path)) {
+ log.debug("'{}' does not exist.", path);
+ return Optional.empty();
+ }
+ Path socketPath = path.resolve("docker.sock");
+ if (!Files.exists(socketPath)) {
+ log.debug("'{}' does not exist.", socketPath);
+ return Optional.empty();
+ }
+ return Optional.of(socketPath);
+ }
+}
diff --git a/core/src/main/resources/META-INF/services/org.testcontainers.dockerclient.DockerClientProviderStrategy b/core/src/main/resources/META-INF/services/org.testcontainers.dockerclient.DockerClientProviderStrategy
index 62493d704a4..cae8bf53041 100644
--- a/core/src/main/resources/META-INF/services/org.testcontainers.dockerclient.DockerClientProviderStrategy
+++ b/core/src/main/resources/META-INF/services/org.testcontainers.dockerclient.DockerClientProviderStrategy
@@ -4,3 +4,4 @@ org.testcontainers.dockerclient.UnixSocketClientProviderStrategy
org.testcontainers.dockerclient.DockerMachineClientProviderStrategy
org.testcontainers.dockerclient.NpipeSocketClientProviderStrategy
org.testcontainers.dockerclient.RootlessDockerClientProviderStrategy
+org.testcontainers.dockerclient.DockerDesktopClientProviderStrategy