Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -209,6 +210,13 @@ default CreateContainerCmd withLinks(List<Link> links) {

CreateContainerCmd withIpv6Address(String ipv6Address);

NetworkingConfig getNetworkingConfig();

/**
* Set the networking configuration for the container.
*/
CreateContainerCmd withNetworkingConfig(NetworkingConfig networkingConfig);

@CheckForNull
Map<String, String> getLabels();

Expand Down
Original file line number Diff line number Diff line change
@@ -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<String, ContainerNetwork> endpointsConfig) {
this.endpointsConfig = endpointsConfig;
}

@JsonProperty("EndpointsConfig")
private Map<String, ContainerNetwork> endpointsConfig;

@CheckForNull
public Map<String, ContainerNetwork> getEndpointsConfig() {
return endpointsConfig;
}

public NetworkingConfig withEndpointsConfig(Map<String, ContainerNetwork> endpointsConfig) {
this.endpointsConfig = endpointsConfig;
return this;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -127,7 +128,7 @@ public class CreateContainerCmdImpl extends AbstrDockerCmd<CreateContainerCmd, C
private List<String> shell;

@JsonProperty("NetworkingConfig")
private NetworkingConfig networkingConfig;
private NetworkingConfig networkingConfig = new NetworkingConfig();

private String ipv4Address = null;

Expand Down Expand Up @@ -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<String> getOnBuild() {
return onBuild;
Expand Down Expand Up @@ -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();
Expand All @@ -623,18 +641,4 @@ public boolean equals(Object o) {
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}

public static class NetworkingConfig {
@JsonProperty("EndpointsConfig")
public Map<String, ContainerNetwork> endpointsConfig;

public Map<String, ContainerNetwork> getEndpointsConfig() {
return endpointsConfig;
}

public NetworkingConfig withEndpointsConfig(Map<String, ContainerNetwork> endpointsConfig) {
this.endpointsConfig = endpointsConfig;
return this;
}
}
}