Skip to content

Commit f355e6e

Browse files
selslackKostyaSha
authored andcommitted
Ability to set container shm size (docker-java#659)
* Added setShmSize option to 'create container' command * Changed shmSize type to Long * Exposed hostConfig
1 parent fd421d8 commit f355e6e

File tree

5 files changed

+56
-3
lines changed

5 files changed

+56
-3
lines changed

src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.github.dockerjava.api.model.Capability;
77
import com.github.dockerjava.api.model.Device;
88
import com.github.dockerjava.api.model.ExposedPort;
9+
import com.github.dockerjava.api.model.HostConfig;
910
import com.github.dockerjava.api.model.Link;
1011
import com.github.dockerjava.api.model.LogConfig;
1112
import com.github.dockerjava.api.model.LxcConf;
@@ -187,6 +188,9 @@ public interface CreateContainerCmd extends SyncDockerCmd<CreateContainerRespons
187188
@CheckForNull
188189
String getPidMode();
189190

191+
@CheckForNull
192+
HostConfig getHostConfig();
193+
190194
@CheckForNull
191195
String getCgroupParent();
192196

@@ -436,6 +440,8 @@ public interface CreateContainerCmd extends SyncDockerCmd<CreateContainerRespons
436440
*/
437441
CreateContainerCmd withPidMode(String pidMode);
438442

443+
CreateContainerCmd withHostConfig(HostConfig hostConfig);
444+
439445
/**
440446
* @throws NotFoundException
441447
* No such container

src/main/java/com/github/dockerjava/api/model/HostConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public class HostConfig {
190190
* @since {@link RemoteApiVersion#VERSION_1_22}
191191
*/
192192
@JsonProperty("ShmSize")
193-
private String shmSize;
193+
private Long shmSize;
194194

195195

196196
@JsonIgnore
@@ -401,7 +401,7 @@ public String getCgroupParent() {
401401
* @see #shmSize
402402
*/
403403
@CheckForNull
404-
public String getShmSize() {
404+
public Long getShmSize() {
405405
return shmSize;
406406
}
407407

@@ -764,7 +764,7 @@ public HostConfig withSecurityOpts(List<String> securityOpts) {
764764
/**
765765
* @see #shmSize
766766
*/
767-
public HostConfig withShmSize(String shmSize) {
767+
public HostConfig withShmSize(Long shmSize) {
768768
this.shmSize = shmSize;
769769
return this;
770770
}

src/main/java/com/github/dockerjava/core/command/CreateContainerCmdImpl.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,11 @@ public String getPidMode() {
472472
return hostConfig.getPidMode();
473473
}
474474

475+
@Override
476+
public HostConfig getHostConfig() {
477+
return hostConfig;
478+
}
479+
475480
@Override
476481
public String getCgroupParent() {
477482
return hostConfig.getCgroupParent();
@@ -976,6 +981,12 @@ public CreateContainerCmd withPidMode(String pidMode) {
976981
return this;
977982
}
978983

984+
@Override
985+
public CreateContainerCmd withHostConfig(HostConfig hostConfig) {
986+
this.hostConfig = hostConfig;
987+
return this;
988+
}
989+
979990
@Override
980991
public String toString() {
981992
return ToStringBuilder.reflectionToString(this);

src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.github.dockerjava.api.model.Device;
1111
import com.github.dockerjava.api.model.ExposedPort;
1212
import com.github.dockerjava.api.model.Frame;
13+
import com.github.dockerjava.api.model.HostConfig;
1314
import com.github.dockerjava.api.model.Link;
1415
import com.github.dockerjava.api.model.LogConfig;
1516
import com.github.dockerjava.api.model.Network;
@@ -21,6 +22,7 @@
2122
import com.github.dockerjava.api.model.Ports.Binding;
2223
import com.github.dockerjava.client.AbstractDockerClientTest;
2324

25+
import org.apache.commons.io.FileUtils;
2426
import org.testng.ITestResult;
2527
import org.testng.annotations.AfterMethod;
2628
import org.testng.annotations.AfterTest;
@@ -735,4 +737,20 @@ public void createContainerWithCgroupParent() throws DockerException {
735737

736738
assertThat(inspectContainer.getHostConfig().getCgroupParent(), is("/parent"));
737739
}
740+
741+
@SuppressWarnings("Duplicates")
742+
@Test
743+
public void createContainerWithShmSize() throws DockerException {
744+
HostConfig hostConfig = new HostConfig().withShmSize(96 * FileUtils.ONE_MB);
745+
CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE)
746+
.withHostConfig(hostConfig).withCmd("true").exec();
747+
748+
LOG.info("Created container {}", container.toString());
749+
750+
assertThat(container.getId(), not(isEmptyString()));
751+
752+
InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec();
753+
754+
assertEquals(inspectContainerResponse.getHostConfig().getShmSize(), hostConfig.getShmSize());
755+
}
738756
}

src/test/java/com/github/dockerjava/netty/exec/CreateContainerCmdExecTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.github.dockerjava.api.model.ContainerNetwork;
1010
import com.github.dockerjava.api.model.Device;
1111
import com.github.dockerjava.api.model.ExposedPort;
12+
import com.github.dockerjava.api.model.HostConfig;
1213
import com.github.dockerjava.api.model.Link;
1314
import com.github.dockerjava.api.model.LogConfig;
1415
import com.github.dockerjava.api.model.Network;
@@ -20,6 +21,7 @@
2021
import com.github.dockerjava.api.model.VolumesFrom;
2122
import com.github.dockerjava.netty.AbstractNettyDockerClientTest;
2223

24+
import org.apache.commons.io.FileUtils;
2325
import org.testng.ITestResult;
2426
import org.testng.annotations.AfterMethod;
2527
import org.testng.annotations.AfterTest;
@@ -676,4 +678,20 @@ public void createContainerWithCgroupParent() throws DockerException {
676678

677679
assertThat(inspectContainer.getHostConfig().getCgroupParent(), is("/parent"));
678680
}
681+
682+
@SuppressWarnings("Duplicates")
683+
@Test
684+
public void createContainerWithShmSize() throws DockerException {
685+
HostConfig hostConfig = new HostConfig().withShmSize(96 * FileUtils.ONE_MB);
686+
CreateContainerResponse container = dockerClient.createContainerCmd(BUSYBOX_IMAGE)
687+
.withHostConfig(hostConfig).withCmd("true").exec();
688+
689+
LOG.info("Created container {}", container.toString());
690+
691+
assertThat(container.getId(), not(isEmptyString()));
692+
693+
InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec();
694+
695+
assertEquals(inspectContainerResponse.getHostConfig().getShmSize(), hostConfig.getShmSize());
696+
}
679697
}

0 commit comments

Comments
 (0)