Skip to content

Commit fe0ce66

Browse files
authored
Introduce extrahosts parameter for building an image (docker-java#1340)
* Introduce extrahosts parameter for building an image * Pass in a Set of extra hosts
1 parent 472f927 commit fe0ce66

File tree

5 files changed

+59
-14
lines changed

5 files changed

+59
-14
lines changed

docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package com.github.dockerjava.api.command;
22

3+
import com.github.dockerjava.api.model.AuthConfigurations;
4+
import com.github.dockerjava.api.model.BuildResponseItem;
5+
6+
import javax.annotation.CheckForNull;
7+
import javax.annotation.Nonnull;
38
import java.io.File;
49
import java.io.InputStream;
510
import java.net.URI;
611
import java.util.Map;
712
import java.util.Set;
813

9-
import javax.annotation.CheckForNull;
10-
import javax.annotation.Nonnull;
11-
12-
import com.github.dockerjava.api.model.AuthConfigurations;
13-
import com.github.dockerjava.api.model.BuildResponseItem;
14-
1514
/**
1615
* Build an image from Dockerfile.
1716
* <p>
@@ -145,6 +144,12 @@ public interface BuildImageCmd extends AsyncDockerCmd<BuildImageCmd, BuildRespon
145144
@CheckForNull
146145
String getTarget();
147146

147+
/**
148+
* @since {@link RemoteApiVersion#VERSION_1_28}
149+
*/
150+
@CheckForNull
151+
Set<String> getExtraHosts();
152+
148153
// setters
149154

150155
/**
@@ -223,6 +228,11 @@ public interface BuildImageCmd extends AsyncDockerCmd<BuildImageCmd, BuildRespon
223228
*/
224229
BuildImageCmd withTarget(String target);
225230

231+
/**
232+
* @since {@link RemoteApiVersion#VERSION_1_28}
233+
*/
234+
BuildImageCmd withExtraHosts(Set<String> extraHosts);
235+
226236
@Override
227237
default BuildImageResultCallback start() {
228238
return exec(new BuildImageResultCallback());

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public class RemoteApiVersion implements Serializable {
7979

8080
public static final RemoteApiVersion VERSION_1_26 = RemoteApiVersion.create(1, 26);
8181
public static final RemoteApiVersion VERSION_1_27 = RemoteApiVersion.create(1, 27);
82+
public static final RemoteApiVersion VERSION_1_28 = RemoteApiVersion.create(1, 28);
8283
public static final RemoteApiVersion VERSION_1_29 = RemoteApiVersion.create(1, 29);
8384
public static final RemoteApiVersion VERSION_1_30 = RemoteApiVersion.create(1, 30);
8485
public static final RemoteApiVersion VERSION_1_31 = RemoteApiVersion.create(1, 31);

docker-java-core/src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package com.github.dockerjava.core.command;
22

3-
import static com.google.common.base.Preconditions.checkNotNull;
3+
import com.github.dockerjava.api.command.BuildImageCmd;
4+
import com.github.dockerjava.api.model.AuthConfigurations;
5+
import com.github.dockerjava.api.model.BuildResponseItem;
6+
import com.github.dockerjava.core.dockerfile.Dockerfile;
7+
import com.github.dockerjava.core.util.FilePathUtil;
48

9+
import javax.annotation.CheckForNull;
510
import java.io.File;
611
import java.io.IOException;
712
import java.io.InputStream;
@@ -10,13 +15,7 @@
1015
import java.util.Map;
1116
import java.util.Set;
1217

13-
import com.github.dockerjava.api.command.BuildImageCmd;
14-
import com.github.dockerjava.api.model.AuthConfigurations;
15-
import com.github.dockerjava.api.model.BuildResponseItem;
16-
import com.github.dockerjava.core.dockerfile.Dockerfile;
17-
import com.github.dockerjava.core.util.FilePathUtil;
18-
19-
import javax.annotation.CheckForNull;
18+
import static com.google.common.base.Preconditions.checkNotNull;
2019

2120
/**
2221
* Build an image from Dockerfile.
@@ -72,6 +71,8 @@ public class BuildImageCmdImpl extends AbstrAsyncDockerCmd<BuildImageCmd, BuildR
7271

7372
private String target;
7473

74+
private Set<String> extraHosts;
75+
7576
public BuildImageCmdImpl(BuildImageCmd.Exec exec) {
7677
super(exec);
7778
}
@@ -218,6 +219,11 @@ public Long getShmsize() {
218219
return shmsize;
219220
}
220221

222+
@Override
223+
public Set<String> getExtraHosts() {
224+
return extraHosts;
225+
}
226+
221227
// setters
222228

223229
/**
@@ -402,6 +408,12 @@ public BuildImageCmd withTarget(String target) {
402408
return this;
403409
}
404410

411+
@Override
412+
public BuildImageCmd withExtraHosts(Set<String> extraHosts) {
413+
this.extraHosts = extraHosts;
414+
return this;
415+
}
416+
405417
@Override
406418
public void close() {
407419
super.close();

docker-java-core/src/main/java/com/github/dockerjava/core/exec/BuildImageCmdExec.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ protected Void execute0(BuildImageCmd command, ResultCallback<BuildResponseItem>
117117
webTarget = webTarget.queryParam("target", command.getTarget());
118118
}
119119

120+
if (command.getExtraHosts() != null) {
121+
webTarget = webTarget.queryParamsSet("extrahosts", command.getExtraHosts());
122+
}
123+
120124
LOGGER.trace("POST: {}", webTarget);
121125

122126
InvocationBuilder builder = resourceWithOptionalAuthConfig(command, webTarget.request())

docker-java/src/test/java/com/github/dockerjava/cmd/BuildImageCmdIT.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_21;
3232
import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_23;
3333
import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_27;
34+
import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_28;
3435
import static com.github.dockerjava.junit.DockerMatchers.isGreaterOrEqual;
3536
import static org.apache.commons.io.FileUtils.writeStringToFile;
3637
import static org.hamcrest.MatcherAssert.assertThat;
@@ -331,6 +332,23 @@ public void quiet() {
331332
LOG.info("Image Inspect: {}", inspectImageResponse.toString());
332333
}
333334

335+
@Test
336+
public void extraHosts() {
337+
assumeThat(dockerRule, isGreaterOrEqual(VERSION_1_28));
338+
339+
File baseDir = fileFromBuildTestResource("labels");
340+
341+
String imageId = dockerRule.getClient()
342+
.buildImageCmd(baseDir)
343+
.withExtraHosts(new HashSet<>(Arrays.asList("host1")))
344+
.start()
345+
.awaitImageId();
346+
347+
InspectImageResponse inspectImageResponse = dockerRule.getClient().inspectImageCmd(imageId).exec();
348+
assertThat(inspectImageResponse, not(nullValue()));
349+
LOG.info("Image Inspect: {}", inspectImageResponse.toString());
350+
}
351+
334352
public void dockerfileNotInBaseDirectory() throws Exception {
335353
File baseDirectory = fileFromBuildTestResource("dockerfileNotInBaseDirectory");
336354
File dockerfile = fileFromBuildTestResource("dockerfileNotInBaseDirectory/dockerfileFolder/Dockerfile");

0 commit comments

Comments
 (0)