Skip to content

Commit a5c2894

Browse files
authored
Fix local Docker Compose (#2998)
* Fix local Docker Compose * set `DOCKER_TLS_VERIFY` as well
1 parent 977058d commit a5c2894

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

core/src/main/java/org/testcontainers/DockerClientFactory.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.commons.lang.StringUtils;
2222
import org.testcontainers.dockerclient.DockerClientProviderStrategy;
2323
import org.testcontainers.dockerclient.DockerMachineClientProviderStrategy;
24+
import org.testcontainers.dockerclient.TransportConfig;
2425
import org.testcontainers.images.TimeLimitedLoggedPullImageResultCallback;
2526
import org.testcontainers.utility.ComparableVersion;
2627
import org.testcontainers.utility.MountableFile;
@@ -132,13 +133,18 @@ private DockerClientProviderStrategy getOrInitializeStrategy() {
132133
}
133134

134135
@UnstableAPI
135-
public String getDockerUnixSocketPath() {
136+
public TransportConfig getTransportConfig() {
137+
return getOrInitializeStrategy().getTransportConfig();
138+
}
139+
140+
@UnstableAPI
141+
public String getRemoteDockerUnixSocketPath() {
136142
String dockerSocketOverride = System.getenv("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE");
137143
if (!StringUtils.isBlank(dockerSocketOverride)) {
138144
return dockerSocketOverride;
139145
}
140146

141-
URI dockerHost = getOrInitializeStrategy().getTransportConfig().getDockerHost();
147+
URI dockerHost = getTransportConfig().getDockerHost();
142148
return "unix".equals(dockerHost.getScheme())
143149
? dockerHost.getRawPath()
144150
: "/var/run/docker.sock";

core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.github.dockerjava.api.DockerClient;
44
import com.github.dockerjava.api.model.Container;
5+
import com.github.dockerjava.core.LocalDirectorySSLConfig;
6+
import com.github.dockerjava.transport.SSLConfig;
57
import com.google.common.annotations.VisibleForTesting;
68
import com.google.common.base.Joiner;
79
import com.google.common.base.Splitter;
@@ -22,6 +24,7 @@
2224
import org.testcontainers.containers.wait.strategy.Wait;
2325
import org.testcontainers.containers.wait.strategy.WaitAllStrategy;
2426
import org.testcontainers.containers.wait.strategy.WaitStrategy;
27+
import org.testcontainers.dockerclient.TransportConfig;
2528
import org.testcontainers.lifecycle.Startable;
2629
import org.testcontainers.utility.AuditLogger;
2730
import org.testcontainers.utility.Base58;
@@ -605,7 +608,7 @@ public ContainerisedDockerCompose(List<File> composeFiles, String identifier) {
605608
// as the docker daemon, just mapping the docker control socket is OK.
606609
// As there seems to be a problem with mapping to the /var/run directory in certain environments (e.g. CircleCI)
607610
// we map the socket file outside of /var/run, as just /docker.sock
608-
addFileSystemBind("/" + DockerClientFactory.instance().getDockerUnixSocketPath(), "/docker.sock", READ_WRITE);
611+
addFileSystemBind("/" + DockerClientFactory.instance().getRemoteDockerUnixSocketPath(), "/docker.sock", READ_WRITE);
609612
addEnv("DOCKER_HOST", "unix:///docker.sock");
610613
setStartupCheckStrategy(new IndefiniteWaitOneShotStartupCheckStrategy());
611614
setWorkingDirectory(containerPwd);
@@ -690,7 +693,17 @@ public void invoke() {
690693

691694
String dockerHost = System.getenv("DOCKER_HOST");
692695
if (dockerHost == null) {
693-
dockerHost = "unix://" + DockerClientFactory.instance().getDockerUnixSocketPath();
696+
TransportConfig transportConfig = DockerClientFactory.instance().getTransportConfig();
697+
SSLConfig sslConfig = transportConfig.getSslConfig();
698+
if (sslConfig != null) {
699+
if (sslConfig instanceof LocalDirectorySSLConfig) {
700+
environment.put("DOCKER_CERT_PATH", ((LocalDirectorySSLConfig) sslConfig).getDockerCertPath());
701+
environment.put("DOCKER_TLS_VERIFY", "true");
702+
} else {
703+
logger().warn("Couldn't set DOCKER_CERT_PATH. `sslConfig` is present but it's not LocalDirectorySSLConfig.");
704+
}
705+
}
706+
dockerHost = transportConfig.getDockerHost().toString();
694707
}
695708
environment.put("DOCKER_HOST", dockerHost);
696709

core/src/main/java/org/testcontainers/utility/ResourceReaper.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public static String start(String hostIpAddress, DockerClient client) {
7676
DockerClientFactory.instance().checkAndPullImage(client, ryukImage);
7777

7878
List<Bind> binds = new ArrayList<>();
79-
binds.add(new Bind("/" + DockerClientFactory.instance().getDockerUnixSocketPath(), new Volume("/var/run/docker.sock")));
79+
binds.add(new Bind("/" + DockerClientFactory.instance().getRemoteDockerUnixSocketPath(), new Volume("/var/run/docker.sock")));
8080

8181
String ryukContainerId = client.createContainerCmd(ryukImage)
8282
.withHostConfig(new HostConfig().withAutoRemove(true))

0 commit comments

Comments
 (0)