Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ public TransportConfig getTransportConfig() {
public String getRemoteDockerUnixSocketPath() {
DockerClientProviderStrategy strategy = getOrInitializeStrategy();
if (strategy.allowUserOverrides()) {
String dockerSocketOverride = System.getenv("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE");
String dockerSocketOverride = TestcontainersConfiguration.getInstance().getDockerSocketOverride();
if (!StringUtils.isBlank(dockerSocketOverride)) {
return dockerSocketOverride;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,32 @@ public Integer getClientPingTimeout() {
return Integer.parseInt(getEnvVarOrProperty("client.ping.timeout", "10"));
}

/**
* Gets the Docker socket override path from configuration.
* <p>
* This method checks for the Docker socket override in the following order:
* <ol>
* <li>{@code TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE} environment variable (if not empty)</li>
* <li>{@code docker.socket.override} property from {@code ~/.testcontainers.properties}</li>
* <li>{@code DOCKER_SOCKET_OVERRIDE} environment variable (unprefixed)</li>
* </ol>
* </p>
*
* @return the configured Docker socket override path, or {@code null} if not set
*/
@UnstableAPI
public String getDockerSocketOverride() {
// Special handling similar to docker.client.strategy
// Looks for TESTCONTAINERS_ prefixed env var only
String prefixedEnvVarOverride = environment.get("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE");
if (prefixedEnvVarOverride != null && !prefixedEnvVarOverride.isEmpty()) {
return prefixedEnvVarOverride;
}

// looks for unprefixed env var or unprefixed property, or null if not set
return getEnvVarOrUserProperty("docker.socket.override", null);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}

@Nullable
@Contract("_, !null, _ -> !null")
private String getConfigurable(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,56 @@ void shouldTrimImageNames() {
.isEqualTo("testcontainers/ryuk:0.3.2");
}

@Test
void shouldReadDockerSocketOverrideFromEnvironment() {
assertThat(newConfig().getDockerSocketOverride()).as("no docker socket override by default").isNull();

environment.put("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE", "/var/run/docker.sock");
assertThat(newConfig().getDockerSocketOverride())
.as("docker socket override read from environment variable")
.isEqualTo("/var/run/docker.sock");
}

@Test
void shouldReadDockerSocketOverrideFromUserProperties() {
assertThat(newConfig().getDockerSocketOverride()).as("no docker socket override by default").isNull();

userProperties.setProperty("docker.socket.override", "/var/run/docker.sock");
assertThat(newConfig().getDockerSocketOverride())
.as("docker socket override read from user properties")
.isEqualTo("/var/run/docker.sock");
}

@Test
void shouldNotReadDockerSocketOverrideFromClasspathProperties() {
assertThat(newConfig().getDockerSocketOverride()).as("no docker socket override by default").isNull();

classpathProperties.setProperty("docker.socket.override", "/var/run/docker.sock");
assertThat(newConfig().getDockerSocketOverride())
.as("docker socket override not read from classpath properties")
.isNull();
}

@Test
void shouldApplyDockerSocketOverridePrecedenceOrder() {
userProperties.setProperty("docker.socket.override", "/var/run/user.sock");
environment.put("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE", "/var/run/env.sock");

assertThat(newConfig().getDockerSocketOverride())
.as("environment variable takes precedence over user property")
.isEqualTo("/var/run/env.sock");
}

@Test
void shouldTreatBlankEnvironmentVariableAsUnset() {
userProperties.setProperty("docker.socket.override", "/var/run/docker.sock");
environment.put("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE", "");

assertThat(newConfig().getDockerSocketOverride())
.as("blank environment variable should fall back to user property")
.isEqualTo("/var/run/docker.sock");
}

private TestcontainersConfiguration newConfig() {
return new TestcontainersConfiguration(userProperties, classpathProperties, environment);
}
Expand Down