+ * Can instead be explicitly specified via ebean.test.dockerHost.
+ */
+ String defaultDockerHost() {
+ String os = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
+ if (os.contains("mac") || os.contains("darwin") || os.contains("win")) {
+ return "host.docker.internal";
+ } else {
+ return "172.17.0.1";
+ }
+ }
+
+}
diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/RedisSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/RedisSetup.java
index 70580bd81..c8fc01671 100644
--- a/ebean-test/src/main/java/io/ebean/test/config/platform/RedisSetup.java
+++ b/ebean-test/src/main/java/io/ebean/test/config/platform/RedisSetup.java
@@ -8,10 +8,14 @@ import java.util.Properties;
class RedisSetup {
static void run(Properties properties) {
-
String version = properties.getProperty("ebean.test.redis");
version = properties.getProperty("ebean.test.redis.version", version);
if (version != null) {
+ DockerHost dockerHost = new DockerHost();
+ if (dockerHost.runningInDocker()) {
+ String host = dockerHost.dockerHost(properties.getProperty("ebean.test.dockerHost"));
+ properties.setProperty("redis.host", host);
+ }
RedisConfig redisConfig = new RedisConfig(version, properties);
RedisContainer container = new RedisContainer(redisConfig);
container.start();
diff --git a/ebean-test/src/test/java/io/ebean/test/config/platform/DockerHostTest.java b/ebean-test/src/test/java/io/ebean/test/config/platform/DockerHostTest.java
new file mode 100644
index 000000000..0be8a5d43
--- /dev/null
+++ b/ebean-test/src/test/java/io/ebean/test/config/platform/DockerHostTest.java
@@ -0,0 +1,87 @@
+package io.ebean.test.config.platform;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class DockerHostTest {
+
+ @Test
+ void runningInDocker_when_false_alwaysUseLocalhost() {
+ DockerHost dockerHost = new DockerHost();
+ assertFalse(dockerHost.runningInDocker());
+ assertEquals("localhost", dockerHost.dockerHost("foo"));
+ }
+
+ @Test
+ void runningInDocker_when_true_useExplicit() {
+ TDDockerHost dockerHost = new TDDockerHost();
+ assertTrue(dockerHost.runningInDocker());
+
+ assertEquals("my-host", dockerHost.dockerHost("my-host"));
+ }
+
+ @Disabled
+ @Test
+ void runningInDocker_when_trueAndLinux_useDefault() {
+ TDDockerHost dockerHost = new TDDockerHost();
+ assertTrue(dockerHost.runningInDocker());
+
+ assertEquals("172.17.0.1", dockerHost.dockerHost(null));
+ }
+
+ @Test
+ void runningInDocker_when_windowsDefault() {
+ TDDockerHost dockerHost = new TDDockerHost();
+ assertTrue(dockerHost.runningInDocker());
+
+ String origName = System.getProperty("os.name");
+ System.setProperty("os.name", "win");
+ try {
+ assertEquals("host.docker.internal",dockerHost.defaultDockerHost());
+ assertEquals("host.docker.internal", dockerHost.dockerHost(null));
+ } finally {
+ System.setProperty("os.name", origName);
+ }
+ }
+
+ @Test
+ void runningInDocker_when_macDefault() {
+ TDDockerHost dockerHost = new TDDockerHost();
+ assertTrue(dockerHost.runningInDocker());
+
+ String origName = System.getProperty("os.name");
+ System.setProperty("os.name", "mac");
+ try {
+ assertEquals("host.docker.internal",dockerHost.defaultDockerHost());
+ assertEquals("host.docker.internal", dockerHost.dockerHost(null));
+ } finally {
+ System.setProperty("os.name", origName);
+ }
+ }
+
+
+ @Test
+ void runningInDocker_when_linuxDefault() {
+ TDDockerHost dockerHost = new TDDockerHost();
+ assertTrue(dockerHost.runningInDocker());
+
+ String origName = System.getProperty("os.name");
+ System.setProperty("os.name", "linux");
+ try {
+ assertEquals("172.17.0.1",dockerHost.defaultDockerHost());
+ assertEquals("172.17.0.1", dockerHost.dockerHost(null));
+ } finally {
+ System.setProperty("os.name", origName);
+ }
+ }
+
+ static class TDDockerHost extends DockerHost {
+
+ @Override
+ boolean initInDocker() {
+ return true;
+ }
+ }
+}