diff --git a/.travis.yml b/.travis.yml index 3c9ea15ebc9..f357a00287c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,6 +41,15 @@ script: -w "$(pwd)" \ openjdk:8-jre \ ./mvnw -B -pl core test -Dtest=*GenericContainerRuleTest + # Run Docker-in-Docker tests inside Alpine + - | + DOCKER_HOST=unix:///var/run/docker.sock DOCKER_TLS_VERIFY= docker run --rm \ + -v "$HOME/.m2":/root/.m2/ \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v "$(pwd)":"$(pwd)" \ + -w "$(pwd)" \ + kiview/openjdk-alpine-bash:8u111 \ + ./mvnw -B -pl core test -Dtest=*GenericContainerRuleTest - mvn -B test -f shade-test/pom.xml cache: diff --git a/core/src/main/java/org/testcontainers/DockerClientFactory.java b/core/src/main/java/org/testcontainers/DockerClientFactory.java index 5d1b17d703c..ac769dc384e 100644 --- a/core/src/main/java/org/testcontainers/DockerClientFactory.java +++ b/core/src/main/java/org/testcontainers/DockerClientFactory.java @@ -38,8 +38,8 @@ public class DockerClientFactory { private static final List CONFIGURATION_STRATEGIES = asList(new EnvironmentAndSystemPropertyClientProviderStrategy(), - new ProxiedUnixSocketClientProviderStrategy(), new UnixSocketClientProviderStrategy(), + new ProxiedUnixSocketClientProviderStrategy(), new DockerMachineClientProviderStrategy()); private String activeApiVersion; private String activeExecutionDriver; diff --git a/core/src/main/java/org/testcontainers/containers/wait/HostPortWaitStrategy.java b/core/src/main/java/org/testcontainers/containers/wait/HostPortWaitStrategy.java index 743432eaeda..77fa9a78e70 100644 --- a/core/src/main/java/org/testcontainers/containers/wait/HostPortWaitStrategy.java +++ b/core/src/main/java/org/testcontainers/containers/wait/HostPortWaitStrategy.java @@ -33,7 +33,7 @@ protected void waitUntilReady() { Callable checkStrategy; // Special case for Docker for Mac, see #160 - if (DockerClientFactory.instance().isUsing(ProxiedUnixSocketClientProviderStrategy.class)) { + if (isUsingSocketProxyOnMac()) { List exposedPorts = container.getExposedPorts(); Integer exposedPort = exposedPorts.stream() @@ -90,4 +90,9 @@ protected void waitUntilReady() { container.getContainerIpAddress() + ":" + port + " should be listening)"); } } + + private boolean isUsingSocketProxyOnMac() { + return DockerClientFactory.instance().isUsing(ProxiedUnixSocketClientProviderStrategy.class) + && System.getProperty("os.name").toLowerCase().contains("mac"); + } } diff --git a/core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java index 918f341f6b8..ed482abc36b 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java +++ b/core/src/main/java/org/testcontainers/dockerclient/EnvironmentAndSystemPropertyClientProviderStrategy.java @@ -21,7 +21,7 @@ public void test() throws InvalidConfigurationException { final int timeout = Integer.parseInt(System.getProperty(PING_TIMEOUT_PROPERTY_NAME, PING_TIMEOUT_DEFAULT)); ping(client, timeout); - } catch (Exception e) { + } catch (Exception | UnsatisfiedLinkError e) { LOGGER.error("ping failed with configuration {} due to {}", getDescription(), e.toString(), e); throw new InvalidConfigurationException("ping failed"); } diff --git a/core/src/main/java/org/testcontainers/dockerclient/ProxiedUnixSocketClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/ProxiedUnixSocketClientProviderStrategy.java index 024ebf1e124..7036e048b34 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/ProxiedUnixSocketClientProviderStrategy.java +++ b/core/src/main/java/org/testcontainers/dockerclient/ProxiedUnixSocketClientProviderStrategy.java @@ -9,8 +9,9 @@ public class ProxiedUnixSocketClientProviderStrategy extends UnixSocketClientPro @Override public void test() throws InvalidConfigurationException { - if (!System.getProperty("os.name").toLowerCase().contains("mac")) { - throw new InvalidConfigurationException("this strategy is only applicable to OS X"); + String osName = System.getProperty("os.name").toLowerCase(); + if (!osName.contains("mac") && !osName.contains("linux")) { + throw new InvalidConfigurationException("this strategy is only applicable to OS X and Linux"); } TcpToUnixSocketProxy proxy = new TcpToUnixSocketProxy(new File(DOCKER_SOCK_PATH)); @@ -20,7 +21,7 @@ public void test() throws InvalidConfigurationException { config = tryConfiguration("tcp://localhost:" + proxyPort); - LOGGER.info("Accessing Docker for Mac unix domain socket via TCP proxy (" + DOCKER_SOCK_PATH + " via localhost:" + proxyPort + ")"); + LOGGER.info("Accessing unix domain socket via TCP proxy (" + DOCKER_SOCK_PATH + " via localhost:" + proxyPort + ")"); } catch (Exception e) { proxy.stop(); diff --git a/core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java index 99f5153f35b..e4aac02e6ed 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java +++ b/core/src/main/java/org/testcontainers/dockerclient/UnixSocketClientProviderStrategy.java @@ -28,7 +28,7 @@ public void test() try { config = tryConfiguration(SOCKET_LOCATION); LOGGER.info("Accessing docker with local Unix socket"); - } catch (Exception e) { + } catch (Exception | UnsatisfiedLinkError e) { throw new InvalidConfigurationException("ping failed", e); } }