From 51716c12d36cec09e58acfe1bbf60466fad57114 Mon Sep 17 00:00:00 2001 From: Sergei Egorov Date: Tue, 18 Feb 2020 22:11:22 +0100 Subject: [PATCH] Allow `npipe` protocol in `DefaultDockerClientConfig` --- .../core/DefaultDockerClientConfig.java | 12 ++++++----- .../jaxrs/JerseyDockerCmdExecFactory.java | 21 ++++++++++++------- .../netty/NettyDockerCmdExecFactory.java | 19 ++++++++++------- .../core/DefaultDockerClientConfigTest.java | 6 ++++++ 4 files changed, 38 insertions(+), 20 deletions(-) diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java b/docker-java-core/src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java index f552ea626..be00cd7ea 100644 --- a/docker-java-core/src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java +++ b/docker-java-core/src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java @@ -98,11 +98,13 @@ public class DefaultDockerClientConfig implements Serializable, DockerClientConf } private URI checkDockerHostScheme(URI dockerHost) { - if ("tcp".equals(dockerHost.getScheme()) || "unix".equals(dockerHost.getScheme())) { - return dockerHost; - } else { - throw new DockerClientException("Unsupported protocol scheme found: '" + dockerHost - + "'. Only 'tcp://' or 'unix://' supported."); + switch (dockerHost.getScheme()) { + case "tcp": + case "unix": + case "npipe": + return dockerHost; + default: + throw new DockerClientException("Unsupported protocol scheme found: '" + dockerHost); } } diff --git a/docker-java-transport-jersey/src/main/java/com/github/dockerjava/jaxrs/JerseyDockerCmdExecFactory.java b/docker-java-transport-jersey/src/main/java/com/github/dockerjava/jaxrs/JerseyDockerCmdExecFactory.java index a83afd7e1..edd659678 100644 --- a/docker-java-transport-jersey/src/main/java/com/github/dockerjava/jaxrs/JerseyDockerCmdExecFactory.java +++ b/docker-java-transport-jersey/src/main/java/com/github/dockerjava/jaxrs/JerseyDockerCmdExecFactory.java @@ -139,15 +139,20 @@ public void init(DockerClientConfig dockerClientConfig) { protocol = "http"; } - if (!originalUri.getScheme().equals("unix")) { - - try { - originalUri = new URI(originalUri.toString().replaceFirst("tcp", protocol)); - } catch (URISyntaxException e) { - throw new RuntimeException(e); - } + switch (originalUri.getScheme()) { + case "unix": + break; + case "tcp": + try { + originalUri = new URI(originalUri.toString().replaceFirst("tcp", protocol)); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } - configureProxy(clientConfig, originalUri, protocol); + configureProxy(clientConfig, originalUri, protocol); + break; + default: + throw new IllegalArgumentException("Unsupported protocol scheme: " + originalUri); } connManager = new PoolingHttpClientConnectionManager(getSchemeRegistry( diff --git a/docker-java-transport-netty/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java b/docker-java-transport-netty/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java index 3a5a1a32b..efc47a742 100644 --- a/docker-java-transport-netty/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java +++ b/docker-java-transport-netty/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java @@ -101,13 +101,18 @@ public void init(DockerClientConfig dockerClientConfig) { String scheme = dockerClientConfig.getDockerHost().getScheme(); String host = ""; - if ("unix".equals(scheme)) { - nettyInitializer = new UnixDomainSocketInitializer(); - host = "DUMMY"; - } else if ("tcp".equals(scheme)) { - nettyInitializer = new InetSocketInitializer(); - host = dockerClientConfig.getDockerHost().getHost() + ":" - + Integer.toString(dockerClientConfig.getDockerHost().getPort()); + switch (scheme) { + case "unix": + nettyInitializer = new UnixDomainSocketInitializer(); + host = "DUMMY"; + break; + case "tcp": + nettyInitializer = new InetSocketInitializer(); + host = dockerClientConfig.getDockerHost().getHost() + ":" + + Integer.toString(dockerClientConfig.getDockerHost().getPort()); + break; + default: + throw new IllegalArgumentException("Unsupported protocol scheme: " + dockerClientConfig.getDockerHost()); } eventLoopGroup = nettyInitializer.init(bootstrap, dockerClientConfig); diff --git a/docker-java/src/test/java/com/github/dockerjava/core/DefaultDockerClientConfigTest.java b/docker-java/src/test/java/com/github/dockerjava/core/DefaultDockerClientConfigTest.java index a8fdb89c6..107512da1 100644 --- a/docker-java/src/test/java/com/github/dockerjava/core/DefaultDockerClientConfigTest.java +++ b/docker-java/src/test/java/com/github/dockerjava/core/DefaultDockerClientConfigTest.java @@ -177,6 +177,12 @@ public void testUnixHostScheme() throws Exception { null); } + @Test() + public void testNpipeHostScheme() throws Exception { + new DefaultDockerClientConfig(URI.create("npipe://foo"), "dockerConfig", "apiVersion", "registryUrl", "registryUsername", "registryPassword", "registryEmail", + null); + } + @Test public void withDockerTlsVerify() throws Exception { DefaultDockerClientConfig.Builder builder = new DefaultDockerClientConfig.Builder();