Skip to content

Commit 5140ab1

Browse files
author
luismclglass
committed
Update to 1.10 API.
Add Copy File Method. Its returns a TAR Stream.
1 parent 76100d0 commit 5140ab1

8 files changed

Lines changed: 858 additions & 663 deletions

File tree

src/main/java/com/kpelykh/docker/client/DockerClient.java

Lines changed: 63 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
package com.kpelykh.docker.client;
22

3-
import com.google.common.base.Preconditions;
4-
import com.kpelykh.docker.client.model.*;
5-
import com.kpelykh.docker.client.utils.CompressArchiveUtil;
6-
import com.kpelykh.docker.client.utils.JsonClientFilter;
7-
import com.sun.jersey.api.client.*;
8-
import com.sun.jersey.api.client.WebResource.Builder;
9-
import com.sun.jersey.api.client.config.ClientConfig;
10-
import com.sun.jersey.api.client.config.DefaultClientConfig;
11-
import com.sun.jersey.api.client.filter.LoggingFilter;
12-
import com.sun.jersey.api.json.JSONConfiguration;
13-
import com.sun.jersey.client.apache4.ApacheHttpClient4;
14-
import com.sun.jersey.client.apache4.ApacheHttpClient4Handler;
15-
import com.sun.jersey.core.util.MultivaluedMapImpl;
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.io.InputStream;
6+
import java.util.HashMap;
7+
import java.util.List;
8+
import java.util.UUID;
9+
10+
import javax.ws.rs.core.MediaType;
11+
import javax.ws.rs.core.MultivaluedMap;
12+
1613
import org.apache.commons.io.FileUtils;
1714
import org.apache.commons.lang.StringUtils;
1815
import org.apache.http.client.HttpClient;
@@ -26,12 +23,34 @@
2623
import org.slf4j.Logger;
2724
import org.slf4j.LoggerFactory;
2825

29-
import javax.ws.rs.core.MediaType;
30-
import javax.ws.rs.core.MultivaluedMap;
31-
import java.io.File;
32-
import java.io.IOException;
33-
import java.util.List;
34-
import java.util.UUID;
26+
import com.google.common.base.Preconditions;
27+
import com.kpelykh.docker.client.model.ChangeLog;
28+
import com.kpelykh.docker.client.model.CommitConfig;
29+
import com.kpelykh.docker.client.model.Container;
30+
import com.kpelykh.docker.client.model.ContainerConfig;
31+
import com.kpelykh.docker.client.model.ContainerCreateResponse;
32+
import com.kpelykh.docker.client.model.ContainerInspectResponse;
33+
import com.kpelykh.docker.client.model.HostConfig;
34+
import com.kpelykh.docker.client.model.Image;
35+
import com.kpelykh.docker.client.model.ImageInspectResponse;
36+
import com.kpelykh.docker.client.model.Info;
37+
import com.kpelykh.docker.client.model.SearchItem;
38+
import com.kpelykh.docker.client.model.Version;
39+
import com.kpelykh.docker.client.utils.CompressArchiveUtil;
40+
import com.kpelykh.docker.client.utils.JsonClientFilter;
41+
import com.sun.jersey.api.client.Client;
42+
import com.sun.jersey.api.client.ClientResponse;
43+
import com.sun.jersey.api.client.GenericType;
44+
import com.sun.jersey.api.client.UniformInterfaceException;
45+
import com.sun.jersey.api.client.WebResource;
46+
import com.sun.jersey.api.client.WebResource.Builder;
47+
import com.sun.jersey.api.client.config.ClientConfig;
48+
import com.sun.jersey.api.client.config.DefaultClientConfig;
49+
import com.sun.jersey.api.client.filter.LoggingFilter;
50+
import com.sun.jersey.api.json.JSONConfiguration;
51+
import com.sun.jersey.client.apache4.ApacheHttpClient4;
52+
import com.sun.jersey.client.apache4.ApacheHttpClient4Handler;
53+
import com.sun.jersey.core.util.MultivaluedMapImpl;
3554

3655
/**
3756
*
@@ -48,7 +67,7 @@ public class DockerClient
4867
private String restEndpointUrl;
4968

5069
public DockerClient(String serverUrl) {
51-
restEndpointUrl = serverUrl + "/v1.8";
70+
restEndpointUrl = serverUrl + "/v1.10";
5271
ClientConfig clientConfig = new DefaultClientConfig();
5372
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
5473

@@ -696,4 +715,28 @@ public ClientResponse build(File dockerFolder, String tag) throws DockerExceptio
696715

697716
}
698717

718+
public InputStream copyFile(String containerId, String resource) throws DockerException {
719+
720+
HashMap<String,String> params = new HashMap<String,String>();
721+
params.put("Resource", resource);
722+
723+
WebResource webResource = client.resource(restEndpointUrl + String.format("/containers/%s/copy", containerId));
724+
725+
try {
726+
LOGGER.trace("POST: {}", webResource);
727+
return webResource.accept(MediaType.APPLICATION_OCTET_STREAM_TYPE).entity(params, MediaType.APPLICATION_JSON).post(InputStream.class);
728+
} catch (UniformInterfaceException exception) {
729+
if (exception.getResponse().getStatus() == 400) {
730+
throw new DockerException("bad parameter");
731+
} else if (exception.getResponse().getStatus() == 404) {
732+
throw new DockerException(String.format("No such container %s", containerId));
733+
} else if (exception.getResponse().getStatus() == 500) {
734+
throw new DockerException("Server error", exception);
735+
} else {
736+
throw new DockerException(exception);
737+
}
738+
}
739+
740+
}
741+
699742
}

src/main/java/com/kpelykh/docker/client/model/ContainerInspectResponse.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ public class ContainerInspectResponse {
6464
@JsonProperty("HostConfig")
6565
private HostConfig hostConfig;
6666

67+
@JsonProperty("ExecDriver")
68+
private String execDriver;
69+
6770
public String getId() {
6871
return id;
6972
}
@@ -199,6 +202,14 @@ public HostConfig getHostConfig() {
199202
public void setHostConfig(HostConfig hostConfig) {
200203
this.hostConfig = hostConfig;
201204
}
205+
206+
public void setExecDriver(String execDriver) {
207+
this.execDriver = execDriver;
208+
}
209+
210+
public String getExecDriver() {
211+
return execDriver;
212+
}
202213

203214
public class NetworkSettings {
204215

src/main/java/com/kpelykh/docker/client/model/HostConfig.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,15 @@ public class HostConfig {
3333
@JsonProperty("PublishAllPorts")
3434
private boolean publishAllPorts;
3535

36+
@JsonProperty("Dns")
37+
private String dns;
38+
39+
@JsonProperty("DnsSearch")
40+
private String dnsSearch;
41+
42+
@JsonProperty("VolumesFrom")
43+
private String volumesFrom;
44+
3645
public HostConfig() {
3746
this.binds = null;
3847
}
@@ -93,7 +102,31 @@ public boolean isPublishAllPorts() {
93102
public void setPublishAllPorts(boolean publishAllPorts) {
94103
this.publishAllPorts = publishAllPorts;
95104
}
96-
105+
106+
public String getDns() {
107+
return dns;
108+
}
109+
110+
public void setDns(String dns) {
111+
this.dns = dns;
112+
}
113+
114+
public void setDnsSearch(String dnsSearch) {
115+
this.dnsSearch = dnsSearch;
116+
}
117+
118+
public String getDnsSearch() {
119+
return dnsSearch;
120+
}
121+
122+
public void setVolumesFrom(String volumesFrom) {
123+
this.volumesFrom = volumesFrom;
124+
}
125+
126+
public String getVolumesFrom() {
127+
return volumesFrom;
128+
}
129+
97130
@Override
98131
public String toString() {
99132
return "HostConfig{" +

src/main/java/com/kpelykh/docker/client/model/Version.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public class Version {
2828
@JsonProperty("Os")
2929
private String operatingSystem;
3030

31+
@JsonProperty("ApiVersion")
32+
private String apiVersion;
3133

3234
public String getVersion() {
3335
return version;
@@ -76,6 +78,14 @@ public String getOperatingSystem() {
7678
public void setOperatingSystem(String operatingSystem) {
7779
this.operatingSystem = operatingSystem;
7880
}
81+
82+
public void setApiVersion(String apiVersion) {
83+
this.apiVersion = apiVersion;
84+
}
85+
86+
public String getApiVersion() {
87+
return apiVersion;
88+
}
7989

8090
@Override
8191
public String toString() {

0 commit comments

Comments
 (0)