Skip to content

Commit 218ab1e

Browse files
author
Marcus Linke
committed
Added CapAdd and CapDrop functionality
1 parent b725d3a commit 218ab1e

8 files changed

Lines changed: 108 additions & 13 deletions

File tree

README.md

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Java API client for [Docker](http://docs.docker.io/ "Docker")
44

5-
Supports a subset of the Docker Client API v1.13, Docker Server version 1.1
5+
Supports a subset of the Docker Client API v1.14, Docker Server version 1.2.0
66

77
Developer forum for [docker-java](https://groups.google.com/forum/?hl=de#!forum/docker-java-dev "docker-java")
88

@@ -31,24 +31,34 @@ Now make sure that docker is up:
3131
$ docker -H tcp://127.0.0.1:2375 version
3232

3333
Client version: 0.8.0
34-
Go version (client): go1.2
35-
Git commit (client): cc3a8c8
36-
Server version: 1.0.0
37-
Git commit (server): 63fe64c
38-
Go version (server): go1.2.1
34+
Go version (client): go1.2
35+
Git commit (client): cc3a8c8
36+
Server version: 1.2.0
37+
Git commit (server): fa7b24f
38+
Go version (server): go1.3.1
3939

4040
Run build with tests:
4141

4242
$ mvn clean install -DskipTests=false
4343

44-
## Docker-Java maven dependency:
44+
## Docker-Java maven dependencies
45+
46+
### Latest release version
4547

4648
<dependency>
4749
<groupId>com.github.docker-java</groupId>
4850
<artifactId>docker-java</artifactId>
4951
<version>0.10.0</version>
5052
</dependency>
5153

54+
### Latest SNAPSHOT version
55+
56+
<dependency>
57+
<groupId>com.github.docker-java</groupId>
58+
<artifactId>docker-java</artifactId>
59+
<version>0.10.1-SNAPSHOT</version>
60+
</dependency>
61+
5262
Latest SNAPSHOT is published to maven repo: https://oss.sonatype.org/content/groups/public via ![Build on CloudBees](http://cloudbees.prod.acquia-sites.com/sites/default/files/styles/large/public/Button-Powered-by-CB.png?itok=uMDWINfY)
5363

5464
## Documentation

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public interface CreateImageCmd extends DockerCmd<CreateImageResponse> {
66

77
public String getRepository();
88

9+
// TODO remove method
910
public String getTag();
1011

1112
public InputStream getImageStream();
@@ -22,6 +23,7 @@ public interface CreateImageCmd extends DockerCmd<CreateImageResponse> {
2223

2324
/**
2425
* @param tag any tag for this image
26+
* @deprecated use repo:tag format for repository
2527
*/
2628
public CreateImageCmd withTag(String tag);
2729

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,12 @@ public class HostConfig {
270270

271271
@JsonProperty("NetworkMode")
272272
private String networkMode;
273+
274+
@JsonProperty("CapAdd")
275+
private String[] capAdd;
276+
277+
@JsonProperty("CapDrop")
278+
private String[] capDrop;
273279

274280
public String[] getBinds() {
275281
return binds;
@@ -314,6 +320,14 @@ public String[] getLinks() {
314320
public String getNetworkMode() {
315321
return networkMode;
316322
}
323+
324+
public String[] getCapAdd() {
325+
return capAdd;
326+
}
327+
328+
public String[] getCapDrop() {
329+
return capDrop;
330+
}
317331

318332
@Override
319333
public String toString() {

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ public interface StartContainerCmd extends DockerCmd<Void> {
2929
public String getVolumesFrom();
3030

3131
public String getContainerId();
32+
33+
public String getNetworkMode();
34+
35+
public String[] getCapAdd();
36+
37+
public String[] getCapDrop();
3238

3339
public StartContainerCmd withBinds(Bind... binds);
3440

@@ -47,16 +53,22 @@ public interface StartContainerCmd extends DockerCmd<Void> {
4753
public StartContainerCmd withVolumesFrom(String volumesFrom);
4854

4955
public StartContainerCmd withContainerId(String containerId);
56+
57+
public StartContainerCmd withNetworkMode(String networkMode);
58+
59+
public StartContainerCmd withCapAdd(String... capAdd);
60+
61+
public StartContainerCmd withCapDrop(String... capDrop);
5062

5163
/**
5264
* @throws NotFoundException No such container
5365
* @throws NotModifiedException Container already started
5466
*/
5567
public Void exec() throws NotFoundException, NotModifiedException;
5668

57-
public abstract String getNetworkMode();
69+
5870

59-
public abstract StartContainerCmd withNetworkMode(String networkMode);
71+
6072

6173
public static interface Exec extends DockerCmdExec<StartContainerCmd, Void> {
6274
}

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

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import com.fasterxml.jackson.annotation.JsonIgnore;
66
import com.fasterxml.jackson.annotation.JsonProperty;
7-
87
import com.github.dockerjava.api.NotFoundException;
98
import com.github.dockerjava.api.NotModifiedException;
109
import com.github.dockerjava.api.command.StartContainerCmd;
@@ -14,7 +13,6 @@
1413
import com.github.dockerjava.api.model.Links;
1514
import com.github.dockerjava.api.model.LxcConf;
1615
import com.github.dockerjava.api.model.Ports;
17-
1816
import com.google.common.base.Preconditions;
1917

2018
/**
@@ -51,6 +49,12 @@ public class StartContainerCmdImpl extends AbstrDockerCmd<StartContainerCmd, Voi
5149
@JsonProperty("NetworkMode")
5250
private String networkMode = "bridge";
5351

52+
@JsonProperty("CapAdd")
53+
private String[] capAdd;
54+
55+
@JsonProperty("CapDrop")
56+
private String[] capDrop;
57+
5458
public StartContainerCmdImpl(StartContainerCmd.Exec exec, String containerId) {
5559
super(exec);
5660
withContainerId(containerId);
@@ -107,6 +111,16 @@ public String getContainerId() {
107111
public String getNetworkMode() {
108112
return networkMode;
109113
}
114+
115+
@Override
116+
public String[] getCapAdd() {
117+
return capAdd;
118+
}
119+
120+
@Override
121+
public String[] getCapDrop() {
122+
return capDrop;
123+
}
110124

111125
@Override
112126
@JsonIgnore
@@ -180,6 +194,20 @@ public StartContainerCmd withNetworkMode(String networkMode) {
180194
this.networkMode = networkMode;
181195
return this;
182196
}
197+
198+
@Override
199+
public StartContainerCmd withCapAdd(String... capAdd) {
200+
Preconditions.checkNotNull(capAdd, "capAdd was not specified");
201+
this.capAdd = capAdd;
202+
return this;
203+
}
204+
205+
@Override
206+
public StartContainerCmd withCapDrop(String... capDrop) {
207+
Preconditions.checkNotNull(capDrop, "capDrop was not specified");
208+
this.capDrop = capDrop;
209+
return this;
210+
}
183211

184212
@Override
185213
public String toString() {

src/main/java/com/github/dockerjava/jaxrs/CreateImageCmdExec.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,4 @@ public CreateImageResponse exec(CreateImageCmd command) {
3232
return webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM_TYPE)
3333
.post(entity(command.getImageStream(), MediaType.APPLICATION_OCTET_STREAM), CreateImageResponse.class);
3434
}
35-
3635
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
docker.io.url=http://localhost:2375
2-
docker.io.version=1.13
2+
docker.io.version=1.14
33
docker.io.enableLoggingFilter=true

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,8 @@ public void startContainerWithNetworkMode() throws DockerException {
267267
LOG.info("Created container {}", container.toString());
268268

269269
assertThat(container.getId(), not(isEmptyString()));
270+
271+
tmpContainers.add(container.getId());
270272

271273
InspectContainerResponse inspectContainerResponse = dockerClient
272274
.inspectContainerCmd(container.getId()).exec();
@@ -278,8 +280,36 @@ public void startContainerWithNetworkMode() throws DockerException {
278280

279281
assertThat(inspectContainerResponse.getHostConfig().getNetworkMode(),
280282
is(equalTo("host")));
283+
284+
}
285+
286+
@Test
287+
public void startContainerWithCapAddAndCapDrop() throws DockerException {
288+
289+
CreateContainerResponse container = dockerClient
290+
.createContainerCmd("busybox")
291+
.withCmd("true").exec();
292+
293+
LOG.info("Created container {}", container.toString());
294+
295+
assertThat(container.getId(), not(isEmptyString()));
281296

282297
tmpContainers.add(container.getId());
298+
299+
dockerClient.startContainerCmd(container.getId())
300+
.withCapAdd("NET_ADMIN")
301+
.withCapDrop("MKNOD").exec();
302+
303+
InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container
304+
.getId()).exec();
305+
306+
assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapAdd()),
307+
contains("NET_ADMIN"));
308+
309+
assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getCapDrop()),
310+
contains("MKNOD"));
311+
312+
283313
}
284314

285315
}

0 commit comments

Comments
 (0)