diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java
index 2556930c0..1b7b76a67 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java
@@ -1,17 +1,16 @@
package com.github.dockerjava.api.command;
+import com.github.dockerjava.api.model.AuthConfigurations;
+import com.github.dockerjava.api.model.BuildResponseItem;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
import java.io.File;
import java.io.InputStream;
import java.net.URI;
import java.util.Map;
import java.util.Set;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-import com.github.dockerjava.api.model.AuthConfigurations;
-import com.github.dockerjava.api.model.BuildResponseItem;
-
/**
* Build an image from Dockerfile.
*
@@ -145,6 +144,12 @@ public interface BuildImageCmd extends AsyncDockerCmd getExtraHosts();
+
// setters
/**
@@ -223,6 +228,11 @@ public interface BuildImageCmd extends AsyncDockerCmd extraHosts);
+
@Override
default BuildImageResultCallback start() {
return exec(new BuildImageResultCallback());
diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java b/docker-java-core/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java
index 859d6f0b5..a38930cb3 100644
--- a/docker-java-core/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java
+++ b/docker-java-core/src/main/java/com/github/dockerjava/core/RemoteApiVersion.java
@@ -79,6 +79,7 @@ public class RemoteApiVersion implements Serializable {
public static final RemoteApiVersion VERSION_1_26 = RemoteApiVersion.create(1, 26);
public static final RemoteApiVersion VERSION_1_27 = RemoteApiVersion.create(1, 27);
+ public static final RemoteApiVersion VERSION_1_28 = RemoteApiVersion.create(1, 28);
public static final RemoteApiVersion VERSION_1_29 = RemoteApiVersion.create(1, 29);
public static final RemoteApiVersion VERSION_1_30 = RemoteApiVersion.create(1, 30);
public static final RemoteApiVersion VERSION_1_31 = RemoteApiVersion.create(1, 31);
diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java b/docker-java-core/src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java
index cf24c0014..1bd1af576 100644
--- a/docker-java-core/src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java
+++ b/docker-java-core/src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java
@@ -1,7 +1,12 @@
package com.github.dockerjava.core.command;
-import static com.google.common.base.Preconditions.checkNotNull;
+import com.github.dockerjava.api.command.BuildImageCmd;
+import com.github.dockerjava.api.model.AuthConfigurations;
+import com.github.dockerjava.api.model.BuildResponseItem;
+import com.github.dockerjava.core.dockerfile.Dockerfile;
+import com.github.dockerjava.core.util.FilePathUtil;
+import javax.annotation.CheckForNull;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -10,13 +15,7 @@
import java.util.Map;
import java.util.Set;
-import com.github.dockerjava.api.command.BuildImageCmd;
-import com.github.dockerjava.api.model.AuthConfigurations;
-import com.github.dockerjava.api.model.BuildResponseItem;
-import com.github.dockerjava.core.dockerfile.Dockerfile;
-import com.github.dockerjava.core.util.FilePathUtil;
-
-import javax.annotation.CheckForNull;
+import static com.google.common.base.Preconditions.checkNotNull;
/**
* Build an image from Dockerfile.
@@ -72,6 +71,8 @@ public class BuildImageCmdImpl extends AbstrAsyncDockerCmd extraHosts;
+
public BuildImageCmdImpl(BuildImageCmd.Exec exec) {
super(exec);
}
@@ -218,6 +219,11 @@ public Long getShmsize() {
return shmsize;
}
+ @Override
+ public Set getExtraHosts() {
+ return extraHosts;
+ }
+
// setters
/**
@@ -402,6 +408,12 @@ public BuildImageCmd withTarget(String target) {
return this;
}
+ @Override
+ public BuildImageCmd withExtraHosts(Set extraHosts) {
+ this.extraHosts = extraHosts;
+ return this;
+ }
+
@Override
public void close() {
super.close();
diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/BuildImageCmdExec.java b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/BuildImageCmdExec.java
index 1a8cd37e5..edf9b6bf9 100644
--- a/docker-java-core/src/main/java/com/github/dockerjava/core/exec/BuildImageCmdExec.java
+++ b/docker-java-core/src/main/java/com/github/dockerjava/core/exec/BuildImageCmdExec.java
@@ -117,6 +117,10 @@ protected Void execute0(BuildImageCmd command, ResultCallback
webTarget = webTarget.queryParam("target", command.getTarget());
}
+ if (command.getExtraHosts() != null) {
+ webTarget = webTarget.queryParamsSet("extrahosts", command.getExtraHosts());
+ }
+
LOGGER.trace("POST: {}", webTarget);
InvocationBuilder builder = resourceWithOptionalAuthConfig(command, webTarget.request())
diff --git a/docker-java/src/test/java/com/github/dockerjava/cmd/BuildImageCmdIT.java b/docker-java/src/test/java/com/github/dockerjava/cmd/BuildImageCmdIT.java
index 1431fc2ab..a0402b975 100644
--- a/docker-java/src/test/java/com/github/dockerjava/cmd/BuildImageCmdIT.java
+++ b/docker-java/src/test/java/com/github/dockerjava/cmd/BuildImageCmdIT.java
@@ -31,6 +31,7 @@
import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_21;
import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_23;
import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_27;
+import static com.github.dockerjava.core.RemoteApiVersion.VERSION_1_28;
import static com.github.dockerjava.junit.DockerMatchers.isGreaterOrEqual;
import static org.apache.commons.io.FileUtils.writeStringToFile;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -331,6 +332,23 @@ public void quiet() {
LOG.info("Image Inspect: {}", inspectImageResponse.toString());
}
+ @Test
+ public void extraHosts() {
+ assumeThat(dockerRule, isGreaterOrEqual(VERSION_1_28));
+
+ File baseDir = fileFromBuildTestResource("labels");
+
+ String imageId = dockerRule.getClient()
+ .buildImageCmd(baseDir)
+ .withExtraHosts(new HashSet<>(Arrays.asList("host1")))
+ .start()
+ .awaitImageId();
+
+ InspectImageResponse inspectImageResponse = dockerRule.getClient().inspectImageCmd(imageId).exec();
+ assertThat(inspectImageResponse, not(nullValue()));
+ LOG.info("Image Inspect: {}", inspectImageResponse.toString());
+ }
+
public void dockerfileNotInBaseDirectory() throws Exception {
File baseDirectory = fileFromBuildTestResource("dockerfileNotInBaseDirectory");
File dockerfile = fileFromBuildTestResource("dockerfileNotInBaseDirectory/dockerfileFolder/Dockerfile");