diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java
index fba83f50c..461cd5679 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java
@@ -13,6 +13,7 @@
import com.github.dockerjava.api.model.Link;
import com.github.dockerjava.api.model.LogConfig;
import com.github.dockerjava.api.model.LxcConf;
+import com.github.dockerjava.api.model.NetworkingConfig;
import com.github.dockerjava.api.model.PortBinding;
import com.github.dockerjava.api.model.Ports;
import com.github.dockerjava.api.model.RestartPolicy;
@@ -209,6 +210,13 @@ default CreateContainerCmd withLinks(List links) {
CreateContainerCmd withIpv6Address(String ipv6Address);
+ NetworkingConfig getNetworkingConfig();
+
+ /**
+ * Set the networking configuration for the container.
+ */
+ CreateContainerCmd withNetworkingConfig(NetworkingConfig networkingConfig);
+
@CheckForNull
Map getLabels();
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkingConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkingConfig.java
new file mode 100644
index 000000000..3af186f6f
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkingConfig.java
@@ -0,0 +1,32 @@
+package com.github.dockerjava.api.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import javax.annotation.CheckForNull;
+import java.util.Map;
+
+/**
+ * Networking configuration for a container.
+ */
+public class NetworkingConfig {
+
+ public NetworkingConfig() {
+ this.endpointsConfig = new HashMap<>();
+ }
+ public NetworkingConfig(Map endpointsConfig) {
+ this.endpointsConfig = endpointsConfig;
+ }
+
+ @JsonProperty("EndpointsConfig")
+ private Map endpointsConfig;
+
+ @CheckForNull
+ public Map getEndpointsConfig() {
+ return endpointsConfig;
+ }
+
+ public NetworkingConfig withEndpointsConfig(Map endpointsConfig) {
+ this.endpointsConfig = endpointsConfig;
+ return this;
+ }
+}
diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/command/CreateContainerCmdImpl.java b/docker-java-core/src/main/java/com/github/dockerjava/core/command/CreateContainerCmdImpl.java
index 9b7f8a8fe..dade58292 100644
--- a/docker-java-core/src/main/java/com/github/dockerjava/core/command/CreateContainerCmdImpl.java
+++ b/docker-java-core/src/main/java/com/github/dockerjava/core/command/CreateContainerCmdImpl.java
@@ -12,6 +12,7 @@
import com.github.dockerjava.api.model.ExposedPorts;
import com.github.dockerjava.api.model.HealthCheck;
import com.github.dockerjava.api.model.HostConfig;
+import com.github.dockerjava.api.model.NetworkingConfig;
import com.github.dockerjava.api.model.Volume;
import com.github.dockerjava.api.model.Volumes;
import org.apache.commons.lang3.builder.EqualsBuilder;
@@ -127,7 +128,7 @@ public class CreateContainerCmdImpl extends AbstrDockerCmd shell;
@JsonProperty("NetworkingConfig")
- private NetworkingConfig networkingConfig;
+ private NetworkingConfig networkingConfig = new NetworkingConfig();
private String ipv4Address = null;
@@ -544,6 +545,18 @@ public CreateContainerCmd withIpv6Address(String ipv6Address) {
return this;
}
+ @Override
+ public NetworkingConfig getNetworkingConfig() {
+ return networkingConfig;
+ }
+
+ @Override
+ public CreateContainerCmd withNetworkingConfig(NetworkingConfig networkingConfig) {
+ Objects.requireNonNull(networkingConfig, "no networkingConfig was specified");
+ this.networkingConfig = networkingConfig;
+ return this;
+ }
+
@CheckForNull
public List getOnBuild() {
return onBuild;
@@ -601,8 +614,13 @@ public CreateContainerResponse exec() throws NotFoundException, ConflictExceptio
}
if (containerNetwork != null && hostConfig.getNetworkMode() != null) {
- networkingConfig = new NetworkingConfig()
- .withEndpointsConfig(singletonMap(hostConfig.getNetworkMode(), containerNetwork));
+ // If the user explicitly sets networkingConfig or endpointConfig to null, its reasonable to not overwrite it
+ if (networkingConfig != null
+ && networkingConfig.getEndpointsConfig() != null
+ && !networkingConfig.getEndpointsConfig().containsKey(hostConfig.getNetworkMode())
+ ) {
+ networkingConfig.getEndpointsConfig().put(hostConfig.getNetworkMode(), containerNetwork);
+ }
}
return super.exec();
@@ -623,18 +641,4 @@ public boolean equals(Object o) {
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
-
- public static class NetworkingConfig {
- @JsonProperty("EndpointsConfig")
- public Map endpointsConfig;
-
- public Map getEndpointsConfig() {
- return endpointsConfig;
- }
-
- public NetworkingConfig withEndpointsConfig(Map endpointsConfig) {
- this.endpointsConfig = endpointsConfig;
- return this;
- }
- }
}