Skip to content

Commit

Permalink
Fix local Docker Compose (#2998)
Browse files Browse the repository at this point in the history
* Fix local Docker Compose

* set `DOCKER_TLS_VERIFY` as well
  • Loading branch information
bsideup authored Jul 16, 2020
1 parent 977058d commit a5c2894
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 5 deletions.
10 changes: 8 additions & 2 deletions core/src/main/java/org/testcontainers/DockerClientFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.apache.commons.lang.StringUtils;
import org.testcontainers.dockerclient.DockerClientProviderStrategy;
import org.testcontainers.dockerclient.DockerMachineClientProviderStrategy;
import org.testcontainers.dockerclient.TransportConfig;
import org.testcontainers.images.TimeLimitedLoggedPullImageResultCallback;
import org.testcontainers.utility.ComparableVersion;
import org.testcontainers.utility.MountableFile;
Expand Down Expand Up @@ -132,13 +133,18 @@ private DockerClientProviderStrategy getOrInitializeStrategy() {
}

@UnstableAPI
public String getDockerUnixSocketPath() {
public TransportConfig getTransportConfig() {
return getOrInitializeStrategy().getTransportConfig();
}

@UnstableAPI
public String getRemoteDockerUnixSocketPath() {
String dockerSocketOverride = System.getenv("TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE");
if (!StringUtils.isBlank(dockerSocketOverride)) {
return dockerSocketOverride;
}

URI dockerHost = getOrInitializeStrategy().getTransportConfig().getDockerHost();
URI dockerHost = getTransportConfig().getDockerHost();
return "unix".equals(dockerHost.getScheme())
? dockerHost.getRawPath()
: "/var/run/docker.sock";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

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

String dockerHost = System.getenv("DOCKER_HOST");
if (dockerHost == null) {
dockerHost = "unix://" + DockerClientFactory.instance().getDockerUnixSocketPath();
TransportConfig transportConfig = DockerClientFactory.instance().getTransportConfig();
SSLConfig sslConfig = transportConfig.getSslConfig();
if (sslConfig != null) {
if (sslConfig instanceof LocalDirectorySSLConfig) {
environment.put("DOCKER_CERT_PATH", ((LocalDirectorySSLConfig) sslConfig).getDockerCertPath());
environment.put("DOCKER_TLS_VERIFY", "true");
} else {
logger().warn("Couldn't set DOCKER_CERT_PATH. `sslConfig` is present but it's not LocalDirectorySSLConfig.");
}
}
dockerHost = transportConfig.getDockerHost().toString();
}
environment.put("DOCKER_HOST", dockerHost);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public static String start(String hostIpAddress, DockerClient client) {
DockerClientFactory.instance().checkAndPullImage(client, ryukImage);

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

String ryukContainerId = client.createContainerCmd(ryukImage)
.withHostConfig(new HostConfig().withAutoRemove(true))
Expand Down

0 comments on commit a5c2894

Please sign in to comment.