diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/configuration/ResolvedDockerHost.java b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/configuration/ResolvedDockerHost.java index e19d592df08..5c214050878 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/configuration/ResolvedDockerHost.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/main/java/org/springframework/boot/buildpack/platform/docker/configuration/ResolvedDockerHost.java @@ -57,8 +57,11 @@ public class ResolvedDockerHost extends DockerHost { @Override public String getAddress() { - return super.getAddress().startsWith(UNIX_SOCKET_PREFIX) - ? super.getAddress().substring(UNIX_SOCKET_PREFIX.length()) : super.getAddress(); + String address = super.getAddress(); + if (address == null) { + address = getDefaultAddress(); + } + return address.startsWith(UNIX_SOCKET_PREFIX) ? address.substring(UNIX_SOCKET_PREFIX.length()) : address; } public boolean isRemote() { @@ -100,7 +103,11 @@ public class ResolvedDockerHost extends DockerHost { DockerContext context = config.getContext(); return new ResolvedDockerHost(context.getDockerHost(), context.isTlsVerify(), context.getTlsPath()); } - return new ResolvedDockerHost(Platform.isWindows() ? WINDOWS_NAMED_PIPE_PATH : DOMAIN_SOCKET_PATH); + return new ResolvedDockerHost(getDefaultAddress()); + } + + private static String getDefaultAddress() { + return Platform.isWindows() ? WINDOWS_NAMED_PIPE_PATH : DOMAIN_SOCKET_PATH; } private static boolean isTrue(String value) { diff --git a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/docker/configuration/ResolvedDockerHostTests.java b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/docker/configuration/ResolvedDockerHostTests.java index 13129984978..a2949d650cc 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/docker/configuration/ResolvedDockerHostTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-buildpack-platform/src/test/java/org/springframework/boot/buildpack/platform/docker/configuration/ResolvedDockerHostTests.java @@ -39,6 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat; * Tests for {@link ResolvedDockerHost}. * * @author Scott Frederick + * @author Moritz Halbritter */ class ResolvedDockerHostTests { @@ -64,6 +65,16 @@ class ResolvedDockerHostTests { assertThat(dockerHost.getCertificatePath()).isNull(); } + @Test + @EnabledOnOs(OS.WINDOWS) + void resolveWhenUsingDefaultContextReturnsWindowsDefault() { + this.environment.put("DOCKER_CONTEXT", "default"); + ResolvedDockerHost dockerHost = ResolvedDockerHost.from(this.environment::get, null); + assertThat(dockerHost.getAddress()).isEqualTo("//./pipe/docker_engine"); + assertThat(dockerHost.isSecure()).isFalse(); + assertThat(dockerHost.getCertificatePath()).isNull(); + } + @Test @DisabledOnOs(OS.WINDOWS) void resolveWhenDockerHostAddressIsNullReturnsLinuxDefault() throws Exception { @@ -75,6 +86,16 @@ class ResolvedDockerHostTests { assertThat(dockerHost.getCertificatePath()).isNull(); } + @Test + @DisabledOnOs(OS.WINDOWS) + void resolveWhenUsingDefaultContextReturnsLinuxDefault() { + this.environment.put("DOCKER_CONTEXT", "default"); + ResolvedDockerHost dockerHost = ResolvedDockerHost.from(this.environment::get, null); + assertThat(dockerHost.getAddress()).isEqualTo("/var/run/docker.sock"); + assertThat(dockerHost.isSecure()).isFalse(); + assertThat(dockerHost.getCertificatePath()).isNull(); + } + @Test void resolveWhenDockerHostAddressIsLocalReturnsAddress(@TempDir Path tempDir) throws IOException { String socketFilePath = Files.createTempFile(tempDir, "remote-transport", null).toAbsolutePath().toString();