Skip to content

Commit e6f4ade

Browse files
authored
Add DefaultDockerClientConfig.Builder#isDockerHostSetExplicitly (docker-java#1692)
1 parent 0047efc commit e6f4ade

File tree

2 files changed

+57
-6
lines changed

2 files changed

+57
-6
lines changed

docker-java-core/src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public class DefaultDockerClientConfig implements Serializable, DockerClientConf
5858

5959
static final Properties DEFAULT_PROPERTIES = new Properties();
6060

61+
static final String DEFAULT_DOCKER_HOST = "unix:///var/run/docker.sock";
62+
6163
static {
6264
CONFIG_KEYS.add(DOCKER_HOST);
6365
CONFIG_KEYS.add(DOCKER_TLS_VERIFY);
@@ -69,7 +71,6 @@ public class DefaultDockerClientConfig implements Serializable, DockerClientConf
6971
CONFIG_KEYS.add(REGISTRY_EMAIL);
7072
CONFIG_KEYS.add(REGISTRY_URL);
7173

72-
DEFAULT_PROPERTIES.put(DOCKER_HOST, "unix:///var/run/docker.sock");
7374
DEFAULT_PROPERTIES.put(DOCKER_CONFIG, "${user.home}/.docker");
7475
DEFAULT_PROPERTIES.put(REGISTRY_URL, "https://index.docker.io/v1/");
7576
DEFAULT_PROPERTIES.put(REGISTRY_USERNAME, "${user.name}");
@@ -337,8 +338,12 @@ public static class Builder {
337338
* registry.email, DOCKER_CERT_PATH, and DOCKER_CONFIG.
338339
*/
339340
public Builder withProperties(Properties p) {
340-
return withDockerHost(p.getProperty(DOCKER_HOST))
341-
.withDockerTlsVerify(p.getProperty(DOCKER_TLS_VERIFY))
341+
342+
if (p.getProperty(DOCKER_HOST) != null) {
343+
withDockerHost(p.getProperty(DOCKER_HOST));
344+
}
345+
346+
return withDockerTlsVerify(p.getProperty(DOCKER_TLS_VERIFY))
342347
.withDockerConfig(p.getProperty(DOCKER_CONFIG))
343348
.withDockerCertPath(p.getProperty(DOCKER_CERT_PATH))
344349
.withApiVersion(p.getProperty(API_VERSION))
@@ -412,6 +417,10 @@ public final Builder withDockerTlsVerify(Boolean dockerTlsVerify) {
412417
return this;
413418
}
414419

420+
public final boolean isDockerHostSetExplicitly() {
421+
return dockerHost != null;
422+
}
423+
415424
/**
416425
* Overrides the default {@link SSLConfig} that is used when calling {@link Builder#withDockerTlsVerify(java.lang.Boolean)} and
417426
* {@link Builder#withDockerCertPath(String)}. This way it is possible to pass a custom {@link SSLConfig} to the resulting
@@ -435,7 +444,9 @@ public DefaultDockerClientConfig build() {
435444
sslConfig = customSslConfig;
436445
}
437446

438-
return new DefaultDockerClientConfig(dockerHost, dockerConfig, apiVersion, registryUrl, registryUsername,
447+
URI dockerHostUri = (dockerHost != null) ? dockerHost : URI.create(DEFAULT_DOCKER_HOST);
448+
449+
return new DefaultDockerClientConfig(dockerHostUri, dockerConfig, apiVersion, registryUrl, registryUsername,
439450
registryPassword, registryEmail, sslConfig);
440451
}
441452

docker-java/src/test/java/com/github/dockerjava/core/DefaultDockerClientConfigTest.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ public void emptyHost() {
9898
DefaultDockerClientConfig config = buildConfig(env, new Properties());
9999

100100
assertEquals(
101-
config.getDockerHost().toString(),
102-
DefaultDockerClientConfig.DEFAULT_PROPERTIES.get(DefaultDockerClientConfig.DOCKER_HOST)
101+
DefaultDockerClientConfig.DEFAULT_DOCKER_HOST,
102+
config.getDockerHost().toString()
103103
);
104104
}
105105

@@ -224,6 +224,46 @@ public void withDockerTlsVerify() throws Exception {
224224
assertThat((Boolean) field.get(builder), is(true));
225225
}
226226

227+
@Test
228+
public void dockerHostSetExplicitlyOnSetter() {
229+
DefaultDockerClientConfig.Builder builder = DefaultDockerClientConfig.createDefaultConfigBuilder(Collections.emptyMap(), new Properties());
230+
assertThat(builder.isDockerHostSetExplicitly(), is(false));
231+
232+
builder.withDockerHost("tcp://foo");
233+
assertThat(builder.isDockerHostSetExplicitly(), is(true));
234+
}
235+
236+
@Test
237+
public void dockerHostSetExplicitlyOnSystemProperty() {
238+
Properties systemProperties = new Properties();
239+
systemProperties.put(DefaultDockerClientConfig.DOCKER_HOST, "tcp://foo");
240+
241+
DefaultDockerClientConfig.Builder builder = DefaultDockerClientConfig.createDefaultConfigBuilder(Collections.emptyMap(), systemProperties);
242+
243+
assertThat(builder.isDockerHostSetExplicitly(), is(true));
244+
}
245+
246+
@Test
247+
public void dockerHostSetExplicitlyOnEnv() {
248+
Map<String, String> env = new HashMap<>();
249+
env.put(DefaultDockerClientConfig.DOCKER_HOST, "tcp://foo");
250+
251+
DefaultDockerClientConfig.Builder builder = DefaultDockerClientConfig.createDefaultConfigBuilder(env, new Properties());
252+
253+
assertThat(builder.isDockerHostSetExplicitly(), is(true));
254+
}
255+
256+
@Test
257+
public void dockerHostSetExplicitlyIfSetToDefaultByUser() {
258+
Map<String, String> env = new HashMap<>();
259+
env.put(DefaultDockerClientConfig.DOCKER_HOST, DefaultDockerClientConfig.DEFAULT_DOCKER_HOST);
260+
261+
DefaultDockerClientConfig.Builder builder = DefaultDockerClientConfig.createDefaultConfigBuilder(env, new Properties());
262+
263+
assertThat(builder.isDockerHostSetExplicitly(), is(true));
264+
}
265+
266+
227267
@Test
228268
public void testGetAuthConfigurationsFromDockerCfg() throws URISyntaxException {
229269
File cfgFile = new File(Resources.getResource("com.github.dockerjava.core/registry.v1").toURI());

0 commit comments

Comments
 (0)