Skip to content

Commit 58df667

Browse files
albanfdavidxia
authored andcommitted
Read configuration file from directory supplied in DOCKER_CONFIG environment variable (spotify#1145)
1 parent f297361 commit 58df667

File tree

6 files changed

+52
-3
lines changed

6 files changed

+52
-3
lines changed

src/main/java/com/spotify/docker/client/DefaultDockerClient.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
package com.spotify.docker.client;
2525

26-
import static com.google.common.base.MoreObjects.firstNonNull;
2726
import static com.google.common.base.Optional.fromNullable;
2827
import static com.google.common.base.Preconditions.checkArgument;
2928
import static com.google.common.base.Preconditions.checkNotNull;
@@ -50,8 +49,10 @@
5049
import com.google.common.base.MoreObjects;
5150
import com.google.common.base.Optional;
5251
import com.google.common.base.Preconditions;
52+
import com.google.common.base.Predicates;
5353
import com.google.common.base.Strings;
5454
import com.google.common.collect.ImmutableSet;
55+
import com.google.common.collect.Iterables;
5556
import com.google.common.collect.Lists;
5657
import com.google.common.collect.Maps;
5758
import com.google.common.io.CharStreams;
@@ -145,6 +146,7 @@
145146
import java.nio.file.Path;
146147
import java.nio.file.Paths;
147148
import java.util.ArrayList;
149+
import java.util.Arrays;
148150
import java.util.Collections;
149151
import java.util.HashMap;
150152
import java.util.HashSet;
@@ -2932,8 +2934,11 @@ public static Builder builder() {
29322934
*/
29332935
public static Builder fromEnv() throws DockerCertificateException {
29342936
final String endpoint = DockerHost.endpointFromEnv();
2935-
final Path dockerCertPath = Paths.get(firstNonNull(DockerHost.certPathFromEnv(),
2936-
DockerHost.defaultCertPath()));
2937+
final Path dockerCertPath = Paths.get(Iterables.find(
2938+
Arrays.asList(DockerHost.certPathFromEnv(),
2939+
DockerHost.configPathFromEnv(),
2940+
DockerHost.defaultCertPath()),
2941+
Predicates.notNull()));
29372942

29382943
final Builder builder = new Builder();
29392944

src/main/java/com/spotify/docker/client/DockerConfigReader.java

+5
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,11 @@ private RegistryAuth authForRegistry(final DockerConfig config, final String reg
253253
}
254254

255255
public Path defaultConfigPath() {
256+
if (DockerHost.configPathFromEnv() != null) {
257+
final Path dockerConfig = Paths.get(DockerHost.configPathFromEnv(), "config.json");
258+
LOG.debug("Using config path from DOCKER_CONFIG: {}", dockerConfig);
259+
return dockerConfig;
260+
}
256261
final String home = System.getProperty("user.home");
257262
final Path dockerConfig = Paths.get(home, ".docker", "config.json");
258263
final Path dockerCfg = Paths.get(home, ".dockercfg");

src/main/java/com/spotify/docker/client/DockerHost.java

+4
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@ static String certPathFromEnv() {
237237
return systemDelegate.getenv("DOCKER_CERT_PATH");
238238
}
239239

240+
static String configPathFromEnv() {
241+
return systemDelegate.getenv("DOCKER_CONFIG");
242+
}
243+
240244
@Override
241245
public String toString() {
242246
return MoreObjects.toStringHelper(this)

src/test/java/com/spotify/docker/client/DockerConfigReaderTest.java

+20
Original file line numberDiff line numberDiff line change
@@ -328,4 +328,24 @@ public void testDuplicateServerInAuthsAndCredHelpers() throws Exception {
328328
.build();
329329
assertThat(reader.authForAllRegistries(path), is(registryConfigs));
330330
}
331+
332+
@Test
333+
public void testConfigFromEnv() throws IOException {
334+
DockerHost.SystemDelegate systemDelegate = mock(DockerHost.SystemDelegate.class);
335+
when(systemDelegate.getenv("DOCKER_CONFIG"))
336+
.thenReturn("src/test/resources/dockerConfigFromEnv");
337+
when(systemDelegate.getProperty("os.name")).thenReturn(System.getProperty("os.name"));
338+
DockerHost.setSystemDelegate(systemDelegate);
339+
try {
340+
DockerConfigReader dockerConfigReader = new DockerConfigReader();
341+
Path path = dockerConfigReader.defaultConfigPath();
342+
assertThat(path.toString().replace("\\", "/"),
343+
equalTo("src/test/resources/dockerConfigFromEnv/config.json"));
344+
345+
final RegistryAuth registryAuth = dockerConfigReader.anyRegistryAuth();
346+
assertThat(registryAuth, equalTo(DOCKER_AUTH_CONFIG));
347+
} finally {
348+
DockerHost.restoreSystemDelegate();
349+
}
350+
}
331351
}

src/test/java/com/spotify/docker/client/DockerHostTest.java

+7
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@ public void testEndpointFromEnv() throws Exception {
6868
assertThat(DockerHost.endpointFromEnv(), equalTo("unix:///var/run/docker.sock"));
6969
}
7070

71+
@Test
72+
public void testConfigFromEnv() {
73+
when(systemDelegate.getenv("DOCKER_CONFIG")).thenReturn("foodir");
74+
DockerHost.setSystemDelegate(systemDelegate);
75+
assertThat(DockerHost.configPathFromEnv(), equalTo("foodir"));
76+
}
77+
7178
@Test
7279
public void testDefaultUnixEndpoint() throws Exception {
7380
assertThat(DockerHost.defaultUnixEndpoint(), equalTo("unix:///var/run/docker.sock"));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"auths": {
3+
"https://index.docker.io/v1/": {
4+
"auth": "ZG9ja2VybWFuOnN3NGd5MGxvCg==",
5+
"email": "dockerman@hub.com"
6+
}
7+
}
8+
}

0 commit comments

Comments
 (0)