diff --git a/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java b/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java index 34682a14f..7af6aa7c0 100644 --- a/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java @@ -447,6 +447,10 @@ public interface CreateContainerCmd extends SyncDockerCmd groups); + + List getGroupAdd(); + /** * Set the PID (Process) Namespace mode for the container, 'host': use the host's PID namespace inside the container */ diff --git a/src/main/java/com/github/dockerjava/api/model/HostConfig.java b/src/main/java/com/github/dockerjava/api/model/HostConfig.java index 4d3275069..fefeacb36 100644 --- a/src/main/java/com/github/dockerjava/api/model/HostConfig.java +++ b/src/main/java/com/github/dockerjava/api/model/HostConfig.java @@ -200,6 +200,9 @@ public class HostConfig implements Serializable { @JsonProperty("PidsLimit") private Long pidsLimit; + @JsonProperty("GroupAdd") + private List groupAdd; + /** * @since ~{@link RemoteApiVersion#VERSION_1_30} */ @@ -826,6 +829,22 @@ public HostConfig withPidsLimit(Long pidsLimit) { return this; } + /** + * @see #groupAdd + */ + @CheckForNull + public List getGroupAdd() { + return groupAdd; + } + + /** + * @see #groupAdd + */ + public HostConfig withGroupAdd(List groupAdd) { + this.groupAdd = groupAdd; + return this; + } + public HostConfig withRuntime(String runtime) { this.runtime = runtime; return this; diff --git a/src/main/java/com/github/dockerjava/core/command/CreateContainerCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/CreateContainerCmdImpl.java index 54e41b2fd..51802f674 100644 --- a/src/main/java/com/github/dockerjava/core/command/CreateContainerCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/CreateContainerCmdImpl.java @@ -267,6 +267,12 @@ public String[] getDnsSearch() { return hostConfig.getDnsSearch(); } + @Override + @JsonIgnore + public List getGroupAdd() { + return hostConfig.getGroupAdd(); + } + @Override public String getDomainName() { return domainName; @@ -1000,6 +1006,12 @@ public CreateContainerCmd withHostConfig(HostConfig hostConfig) { return this; } + @Override + public CreateContainerCmd withGroupAdd(List groupAdd) { + this.hostConfig.withGroupAdd(groupAdd); + return this; + } + @Override public String toString() { return ToStringBuilder.reflectionToString(this); diff --git a/src/test/java/com/github/dockerjava/cmd/CreateContainerCmdIT.java b/src/test/java/com/github/dockerjava/cmd/CreateContainerCmdIT.java index 51f003a75..6ef137727 100644 --- a/src/test/java/com/github/dockerjava/cmd/CreateContainerCmdIT.java +++ b/src/test/java/com/github/dockerjava/cmd/CreateContainerCmdIT.java @@ -41,6 +41,7 @@ import java.security.SecureRandom; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -835,6 +836,25 @@ public void createContainerWithNetworkID() { assertThat(containerNetwork, notNullValue()); } + @Test + public void createContainerWithGroupAdd() throws DockerException { + List groupsToAdd = Arrays.asList("www-data"); + + CreateContainerResponse container = dockerRule.getClient().createContainerCmd(DEFAULT_IMAGE) + .withGroupAdd(groupsToAdd) + .withCmd("true").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerRule.getClient().inspectContainerCmd(container.getId()).exec(); + + LOG.info("Inspect container {}", inspectContainerResponse.getHostConfig().getGroupAdd()); + + assertThat(inspectContainerResponse.getHostConfig().getGroupAdd(), is(groupsToAdd)); + } + @Test public void createContainerFromPrivateRegistryWithValidAuth() throws Exception { DockerAssume.assumeSwarm(dockerRule.getClient()); @@ -865,5 +885,4 @@ public void createContainerFromPrivateRegistryWithNoAuth() throws Exception { dockerRule.getClient().createContainerCmd(imgName) .exec(); } - }