
net.wouterdanes.docker.remoteapi.ContainersService Maven / Gradle / Ivy
package net.wouterdanes.docker.remoteapi;
import javax.ws.rs.HttpMethod;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import net.wouterdanes.docker.remoteapi.exception.ContainerNotFoundException;
import net.wouterdanes.docker.remoteapi.exception.DockerException;
import net.wouterdanes.docker.remoteapi.exception.ImageNotFoundException;
import net.wouterdanes.docker.remoteapi.model.ContainerCreateRequest;
import net.wouterdanes.docker.remoteapi.model.ContainerCreateResponse;
import net.wouterdanes.docker.remoteapi.model.ContainerInspectionResult;
import net.wouterdanes.docker.remoteapi.model.ContainerStartRequest;
/**
* This class is responsible for talking to the Docker Remote API "containers" endpoint.
See
* http://docs.docker.io/reference/api/docker_remote_api_v1.10/#21-containers
*/
public class ContainersService extends BaseService {
public ContainersService(String dockerApiRoot) {
super(dockerApiRoot, "/containers");
}
public String createContainer(ContainerCreateRequest request) {
String createResponseStr;
try {
createResponseStr = getServiceEndPoint()
.path("/create")
.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.entity(toJson(request), MediaType.APPLICATION_JSON_TYPE), String.class);
} catch (WebApplicationException e) {
Response.StatusType statusInfo = e.getResponse().getStatusInfo();
switch (statusInfo.getStatusCode()) {
case 404:
throw new ImageNotFoundException(request.getImage(), e);
default:
throw new DockerException(e);
}
}
ContainerCreateResponse createResponse = toObject(createResponseStr, ContainerCreateResponse.class);
return createResponse.getId();
}
public void startContainer(String id, ContainerStartRequest configuration) {
Response response = getServiceEndPoint()
.path(id)
.path("/start")
.request()
.post(Entity.entity(toJson(configuration), MediaType.APPLICATION_JSON_TYPE));
Response.StatusType statusInfo = response.getStatusInfo();
response.close();
checkContainerTargetingResponse(id, statusInfo);
}
public void killContainer(String id) {
Response response = getServiceEndPoint()
.path(id)
.path("/kill")
.request()
.method(HttpMethod.POST);
Response.StatusType statusInfo = response.getStatusInfo();
response.close();
checkContainerTargetingResponse(id, statusInfo);
}
public void deleteContainer(String id) {
Response response = getServiceEndPoint()
.path(id)
.request()
.delete();
Response.StatusType statusInfo = response.getStatusInfo();
response.close();
checkContainerTargetingResponse(id, statusInfo);
}
private static void checkContainerTargetingResponse(final String id, final Response.StatusType statusInfo) {
switch (statusInfo.getStatusCode()) {
case 404:
throw new ContainerNotFoundException(id);
case 500:
throw new DockerException(statusInfo.getReasonPhrase());
}
}
public ContainerInspectionResult inspectContainer(final String containerId) {
String json = getServiceEndPoint()
.path(containerId)
.path("json")
.request(MediaType.APPLICATION_JSON_TYPE)
.get(String.class);
return toObject(json, ContainerInspectionResult.class);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy