+ * 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/HanaSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/HanaSetup.java
index 8ad014b70..a5137686f 100644
--- a/ebean-test/src/main/java/io/ebean/test/config/platform/HanaSetup.java
+++ b/ebean-test/src/main/java/io/ebean/test/config/platform/HanaSetup.java
@@ -20,7 +20,7 @@ class HanaSetup implements PlatformSetup {
config.setUsername("SYSTEM");
config.setPassword("HXEHana1");
config.setDatabaseName("HXE");
- config.setUrl("jdbc:sap://localhost:${port}/?databaseName=${databaseName}");
+ config.setUrl("jdbc:sap://${host}:${port}/?databaseName=${databaseName}");
String schema = config.getSchema();
if (schema != null && !schema.equals(config.getUsername())) {
config.urlAppend("¤tSchema=" + schema);
diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/MariaDBSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/MariaDBSetup.java
index 4e242d4b0..f2ff22cc4 100644
--- a/ebean-test/src/main/java/io/ebean/test/config/platform/MariaDBSetup.java
+++ b/ebean-test/src/main/java/io/ebean/test/config/platform/MariaDBSetup.java
@@ -13,7 +13,7 @@ class MariaDBSetup implements PlatformSetup {
config.setDefaultPort(defaultPort);
config.setUsernameDefault();
config.setPasswordDefault();
- config.setUrl("jdbc:mariadb://localhost:${port}/${databaseName}?useLegacyDatetimeCode=false");
+ config.setUrl("jdbc:mariadb://${host}:${port}/${databaseName}?useLegacyDatetimeCode=false");
config.datasourceDefaults();
return dockerProperties(config);
diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/MySqlSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/MySqlSetup.java
index 3939ffbec..c865c41b7 100644
--- a/ebean-test/src/main/java/io/ebean/test/config/platform/MySqlSetup.java
+++ b/ebean-test/src/main/java/io/ebean/test/config/platform/MySqlSetup.java
@@ -13,7 +13,7 @@ class MySqlSetup implements PlatformSetup {
config.setDefaultPort(defaultPort);
config.setUsernameDefault();
config.setPasswordDefault();
- config.setUrl("jdbc:mysql://localhost:${port}/${databaseName}");
+ config.setUrl("jdbc:mysql://${host}:${port}/${databaseName}");
config.setDriver(defaultDriver());
config.datasourceDefaults();
diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/PostgisSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/PostgisSetup.java
index 8180dc425..bd5a38387 100644
--- a/ebean-test/src/main/java/io/ebean/test/config/platform/PostgisSetup.java
+++ b/ebean-test/src/main/java/io/ebean/test/config/platform/PostgisSetup.java
@@ -20,7 +20,7 @@ class PostgisSetup implements PlatformSetup {
config.setUsernameDefault();
config.setPasswordDefault();
config.setDriver("org.postgis.DriverWrapperLW");
- config.setUrl("jdbc:postgresql_lwgis://localhost:${port}/${databaseName}");
+ config.setUrl("jdbc:postgresql_lwgis://${host}:${port}/${databaseName}");
String schema = config.getSchema();
if (schema != null && !schema.equals(config.getUsername())) {
diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/PostgresSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/PostgresSetup.java
index 8e9045408..e5d1206f7 100644
--- a/ebean-test/src/main/java/io/ebean/test/config/platform/PostgresSetup.java
+++ b/ebean-test/src/main/java/io/ebean/test/config/platform/PostgresSetup.java
@@ -13,7 +13,7 @@ class PostgresSetup implements PlatformSetup {
config.setDefaultPort(defaultPort);
config.setUsernameDefault();
config.setPasswordDefault();
- config.setUrl("jdbc:postgresql://localhost:${port}/${databaseName}");
+ config.setUrl("jdbc:postgresql://${host}:${port}/${databaseName}");
String schema = config.getSchema();
if (schema != null && !schema.equals(config.getUsername())) {
@@ -44,7 +44,7 @@ class PostgresSetup implements PlatformSetup {
config.setDefaultPort(defaultPort);
config.setExtraUsernameDefault();
config.setExtraDbPasswordDefault();
- config.setUrl("jdbc:postgresql://localhost:${port}/${databaseName}");
+ config.setUrl("jdbc:postgresql://${host}:${port}/${databaseName}");
config.setDriver("org.postgresql.Driver");
config.extraDatasourceDefaults();
}
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/main/java/io/ebean/test/config/platform/SqlServerSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/SqlServerSetup.java
index 09b76323e..3428fb43e 100644
--- a/ebean-test/src/main/java/io/ebean/test/config/platform/SqlServerSetup.java
+++ b/ebean-test/src/main/java/io/ebean/test/config/platform/SqlServerSetup.java
@@ -13,7 +13,7 @@ class SqlServerSetup implements PlatformSetup {
config.setDefaultPort(1433);
config.setUsernameDefault();
config.setPassword("SqlS3rv#r");
- config.setUrl("jdbc:sqlserver://localhost:${port};databaseName=${databaseName};sendTimeAsDateTime=false");
+ config.setUrl("jdbc:sqlserver://${host}:${port};databaseName=${databaseName};sendTimeAsDateTime=false");
config.setDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver");
config.datasourceDefaults();
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;
+ }
+ }
+}