Commit f18b657f authored by Andy Wilkinson's avatar Andy Wilkinson

Fix handling of DOCKER_HOST that begins with unix://

Fixes gh-22300
parent 794ded52
...@@ -50,6 +50,8 @@ import org.springframework.boot.buildpack.platform.system.Environment; ...@@ -50,6 +50,8 @@ import org.springframework.boot.buildpack.platform.system.Environment;
*/ */
final class LocalHttpClientTransport extends HttpClientTransport { final class LocalHttpClientTransport extends HttpClientTransport {
private static final String UNIX_SOCKET_PREFIX = "unix://";
private static final String DOCKER_HOST = "DOCKER_HOST"; private static final String DOCKER_HOST = "DOCKER_HOST";
private static final HttpHost LOCAL_DOCKER_HOST = HttpHost.create("docker://localhost"); private static final HttpHost LOCAL_DOCKER_HOST = HttpHost.create("docker://localhost");
...@@ -60,11 +62,17 @@ final class LocalHttpClientTransport extends HttpClientTransport { ...@@ -60,11 +62,17 @@ final class LocalHttpClientTransport extends HttpClientTransport {
static LocalHttpClientTransport create(Environment environment) { static LocalHttpClientTransport create(Environment environment) {
HttpClientBuilder builder = HttpClients.custom(); HttpClientBuilder builder = HttpClients.custom();
builder.setConnectionManager(new LocalConnectionManager(environment.get(DOCKER_HOST))); builder.setConnectionManager(new LocalConnectionManager(socketFilePath(environment)));
builder.setSchemePortResolver(new LocalSchemePortResolver()); builder.setSchemePortResolver(new LocalSchemePortResolver());
return new LocalHttpClientTransport(builder.build()); return new LocalHttpClientTransport(builder.build());
} }
private static String socketFilePath(Environment environment) {
String host = environment.get(DOCKER_HOST);
return (host != null && host.startsWith(UNIX_SOCKET_PREFIX)) ? host.substring(UNIX_SOCKET_PREFIX.length())
: host;
}
/** /**
* {@link HttpClientConnectionManager} for local Docker. * {@link HttpClientConnectionManager} for local Docker.
*/ */
......
...@@ -40,6 +40,8 @@ import org.springframework.util.Assert; ...@@ -40,6 +40,8 @@ import org.springframework.util.Assert;
*/ */
final class RemoteHttpClientTransport extends HttpClientTransport { final class RemoteHttpClientTransport extends HttpClientTransport {
private static final String UNIX_SOCKET_PREFIX = "unix://";
private static final String DOCKER_HOST = "DOCKER_HOST"; private static final String DOCKER_HOST = "DOCKER_HOST";
private static final String DOCKER_TLS_VERIFY = "DOCKER_TLS_VERIFY"; private static final String DOCKER_TLS_VERIFY = "DOCKER_TLS_VERIFY";
...@@ -63,8 +65,9 @@ final class RemoteHttpClientTransport extends HttpClientTransport { ...@@ -63,8 +65,9 @@ final class RemoteHttpClientTransport extends HttpClientTransport {
} }
private static boolean isLocalFileReference(String host) { private static boolean isLocalFileReference(String host) {
String filePath = host.startsWith(UNIX_SOCKET_PREFIX) ? host.substring(UNIX_SOCKET_PREFIX.length()) : host;
try { try {
return Files.exists(Paths.get(host)); return Files.exists(Paths.get(filePath));
} }
catch (Exception ex) { catch (Exception ex) {
return false; return false;
......
...@@ -50,6 +50,15 @@ class HttpTransportTests { ...@@ -50,6 +50,15 @@ class HttpTransportTests {
assertThat(transport).isInstanceOf(LocalHttpClientTransport.class); assertThat(transport).isInstanceOf(LocalHttpClientTransport.class);
} }
@Test
void createWhenDockerHostVariableIsUnixSchemePrefixedFileReturnsLocal(@TempDir Path tempDir) throws IOException {
String dummySocketFilePath = "unix://"
+ Files.createTempFile(tempDir, "http-transport", null).toAbsolutePath().toString();
Map<String, String> environment = Collections.singletonMap("DOCKER_HOST", dummySocketFilePath);
HttpTransport transport = HttpTransport.create(environment::get);
assertThat(transport).isInstanceOf(LocalHttpClientTransport.class);
}
@Test @Test
void createWhenDoesNotHaveDockerHostVariableReturnsLocal() { void createWhenDoesNotHaveDockerHostVariableReturnsLocal() {
HttpTransport transport = HttpTransport.create((name) -> null); HttpTransport transport = HttpTransport.create((name) -> null);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment