Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import com.github.dockerjava.jaxrs.filter.JsonClientFilter;
import com.github.dockerjava.jaxrs.filter.ResponseStatusExceptionFilter;
import com.github.dockerjava.jaxrs.filter.SelectiveLoggingFilter;

import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
Expand All @@ -63,8 +64,13 @@
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.client.ClientResponseFilter;
import javax.ws.rs.client.WebTarget;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URI;
import java.util.List;

import static com.google.common.base.Preconditions.checkNotNull;

Expand Down Expand Up @@ -96,6 +102,7 @@ public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory {
@Override
public void init(DockerClientConfig dockerClientConfig) {
checkNotNull(dockerClientConfig, "config was not specified");
this.dockerClientConfig = dockerClientConfig;

ClientConfig clientConfig = new ClientConfig();
clientConfig.connectorProvider(new ApacheConnectorProvider());
Expand Down Expand Up @@ -135,11 +142,14 @@ public void init(DockerClientConfig dockerClientConfig) {
SSLContext sslContext = null;

if (dockerClientConfig.getSslConfig() != null) {
configureProxy(clientConfig, "https");
try {
sslContext = dockerClientConfig.getSslConfig().getSSLContext();
} catch (Exception ex) {
throw new DockerClientException("Error in SSL Configuration", ex);
}
} else {
configureProxy(clientConfig, "http");
}

PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(getSchemeRegistry(
Expand Down Expand Up @@ -170,7 +180,30 @@ public void init(DockerClientConfig dockerClientConfig) {

baseResource = client.target(dockerClientConfig.getUri()).path(dockerClientConfig.getVersion().asWebPathPart());

this.dockerClientConfig = dockerClientConfig;
}

private void configureProxy(ClientConfig clientConfig, String protocol) {

List<Proxy> proxies = ProxySelector.getDefault().select(dockerClientConfig.getUri());

for (Proxy proxy : proxies) {
InetSocketAddress address = (InetSocketAddress) proxy.address();
if (address != null) {
String hostname = address.getHostName();
int port = address.getPort();

clientConfig.property(ClientProperties.PROXY_URI, protocol + "://" + hostname + ":" + port);

String httpProxyUser = System.getProperty(protocol + ".proxyUser");
if (httpProxyUser != null) {
clientConfig.property(ClientProperties.PROXY_USERNAME, httpProxyUser);
String httpProxyPassword = System.getProperty(protocol + ".proxyPassword");
if (httpProxyPassword != null) {
clientConfig.property(ClientProperties.PROXY_PASSWORD, httpProxyPassword);
}
}
}
}
}

private org.apache.http.config.Registry<ConnectionSocketFactory> getSchemeRegistry(final URI originalUri,
Expand Down