All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.spotify.docker.client.DockerClient Maven / Gradle / Ivy

There is a newer version: 8.16.0
Show newest version
/*-
 * -\-\-
 * docker-client
 * --
 * Copyright (C) 2016 Spotify AB
 * Copyright (C) 2016 Thoughtworks, Inc
 * --
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * -/-/-
 */

package com.spotify.docker.client;

import static com.google.common.base.Strings.isNullOrEmpty;

import com.spotify.docker.client.exceptions.BadParamException;
import com.spotify.docker.client.exceptions.ConflictException;
import com.spotify.docker.client.exceptions.ContainerNotFoundException;
import com.spotify.docker.client.exceptions.ContainerRenameConflictException;
import com.spotify.docker.client.exceptions.DockerException;
import com.spotify.docker.client.exceptions.ExecNotFoundException;
import com.spotify.docker.client.exceptions.ImageNotFoundException;
import com.spotify.docker.client.exceptions.NetworkNotFoundException;
import com.spotify.docker.client.exceptions.NotFoundException;
import com.spotify.docker.client.exceptions.PermissionException;
import com.spotify.docker.client.exceptions.UnsupportedApiVersionException;
import com.spotify.docker.client.messages.Container;
import com.spotify.docker.client.messages.ContainerChange;
import com.spotify.docker.client.messages.ContainerConfig;
import com.spotify.docker.client.messages.ContainerCreation;
import com.spotify.docker.client.messages.ContainerExit;
import com.spotify.docker.client.messages.ContainerInfo;
import com.spotify.docker.client.messages.ContainerStats;
import com.spotify.docker.client.messages.Event;
import com.spotify.docker.client.messages.ExecCreation;
import com.spotify.docker.client.messages.ExecState;
import com.spotify.docker.client.messages.Image;
import com.spotify.docker.client.messages.ImageHistory;
import com.spotify.docker.client.messages.ImageInfo;
import com.spotify.docker.client.messages.ImageSearchResult;
import com.spotify.docker.client.messages.Info;
import com.spotify.docker.client.messages.Network;
import com.spotify.docker.client.messages.NetworkConfig;
import com.spotify.docker.client.messages.NetworkCreation;
import com.spotify.docker.client.messages.RegistryAuth;
import com.spotify.docker.client.messages.RemovedImage;
import com.spotify.docker.client.messages.ServiceCreateResponse;
import com.spotify.docker.client.messages.TopResults;
import com.spotify.docker.client.messages.Version;
import com.spotify.docker.client.messages.Volume;
import com.spotify.docker.client.messages.VolumeList;
import com.spotify.docker.client.messages.swarm.Service;
import com.spotify.docker.client.messages.swarm.ServiceSpec;
import com.spotify.docker.client.messages.swarm.Swarm;
import com.spotify.docker.client.messages.swarm.Task;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.file.Path;
import java.util.List;
import java.util.Objects;

/**
 * A client for interacting with dockerd.
 *
 * 

Note: All methods throw DockerException on unexpected docker response status codes. */ @SuppressWarnings("JavadocMethod") public interface DockerClient extends Closeable { /** * Ping the docker daemon. Returns "OK" if all is well, though that it simply returns a 200 status * is probably sufficient information. * * @return String "OK" * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ String ping() throws DockerException, InterruptedException; /** * Get the docker version. * * @return docker version * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ Version version() throws DockerException, InterruptedException; /** * Check auth configuration. * * @param registryAuth The {@link RegistryAuth} needed to pull the image. * @return status code of auth request * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ int auth(final RegistryAuth registryAuth) throws DockerException, InterruptedException; /** * Get docker instance information. * * @return docker info * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ Info info() throws DockerException, InterruptedException; /** * List docker containers. * * @param params Container listing and filtering options. * @return A list of containers. * @throws BadParamException * if one or more params were bad (400) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List listContainers(ListContainersParam... params) throws DockerException, InterruptedException; /** * List docker images. * * @param params Image listing and filtering options. * @return A list of images. * @throws BadParamException * if one or more params were bad (400) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List listImages(ListImagesParam... params) throws DockerException, InterruptedException; /** * Inspect a docker container. * * @param containerId The id of the container to inspect. * @return Info about the container. * @throws ContainerNotFoundException * if container was not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ContainerInfo inspectContainer(String containerId) throws DockerException, InterruptedException; /** * Create a new image from a container's changes. * * @param containerId The id of the container to commit. * @param comment commit message. * @param author image author. * @param tag image tag. * @param repo repository to commit to. * @param config ContainerConfig to commit. * @return ContainerCreation reply. * @throws ContainerNotFoundException * if container was not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ContainerCreation commitContainer(final String containerId, final String repo, final String tag, final ContainerConfig config, final String comment, final String author) throws DockerException, InterruptedException; /** * Inspect a docker container image. * * @param image The image to inspect. * @return Info about the image. * @throws ImageNotFoundException * if image was not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ImageInfo inspectImage(String image) throws DockerException, InterruptedException; /** * Remove a docker image. * * @param image The image to remove. * @return A list describing each image which was removed. * @throws ImageNotFoundException * if image was not found (404) * @throws ConflictException * conflict (409) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List removeImage(String image) throws DockerException, InterruptedException; /** * Remove a docker image. * * @param image The image to remove. * @param force Force image removal. * @param noPrune Do not delete untagged parents. * @return A list describing each image which was removed. * @throws ImageNotFoundException * if image was not found (404) * @throws ConflictException * conflict (409) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List removeImage(String image, boolean force, boolean noPrune) throws DockerException, InterruptedException; /** * Search for images on Docker Hub * *

This method is broken for Docker 1.7.x because of a Docker bug. * See https://github.com/docker/docker/pull/14850. * * @param term the search term * @return a list of matches for the given search term * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List searchImages(String term) throws DockerException, InterruptedException; /** * Creates a single image from a tarball. This method also tags the image * with the given image name upon loading completion. * * @param image the name to assign to the image. * @param imagePayload the image's payload (i.e.: the stream corresponding to the image's .tar * file). * @throws DockerException if a server error occurred (500). * @throws InterruptedException if the thread is interrupted. * * @deprecated Use {@link #load(InputStream)} to load a set of image layers from a tarball. Use * {@link #create(String, InputStream)} to create a single image from the contents of a tarball. */ @Deprecated void load(String image, InputStream imagePayload) throws DockerException, InterruptedException; /** * Creates a single image from a tarball. This method also tags the image * with the given image name upon loading completion. * * @param image the name to assign to the image. * @param imagePayload the image's payload (i.e.: the stream corresponding to the image's .tar * file). * @param handler The handler to use for processing each progress message received from * Docker. * @throws DockerException if a server error occurred (500). * @throws InterruptedException if the thread is interrupted. * * @deprecated Use {@link #load(InputStream)} to load a set of image layers from a tarball. Use * {@link #create(String, InputStream, ProgressHandler)} to create a single image * from the contents of a tarball. */ @Deprecated void load(String image, InputStream imagePayload, ProgressHandler handler) throws DockerException, InterruptedException; /** * Creates a single image from a tarball. This method also tags the image * with the given image name upon loading completion. * * @param image the name to assign to the image. * @param imagePayload the image's payload (i.e.: the stream corresponding to the image's .tar * file). * @param registryAuth the {@link RegistryAuth} needed to pull the image. * @throws DockerException if a server error occurred (500). * @throws InterruptedException if the thread is interrupted. * * @deprecated Use {@link #load(InputStream)} to load a set of image layers from a tarball. Use * {@link #create(String, InputStream)} to create a single image from the contents of a tarball. */ @Deprecated void load(String image, InputStream imagePayload, RegistryAuth registryAuth) throws DockerException, InterruptedException; /** * Creates a single image from a tarball. This method also tags the image * with the given image name upon loading completion. * * @param image the name to assign to the image. * @param imagePayload the image's payload (i.e.: the stream corresponding to the image's .tar * file). * @param registryAuth the {@link RegistryAuth} needed to pull the image. * @param handler The handler to use for processing each progress message received from * Docker. * @throws DockerException if a server error occurred (500). * @throws InterruptedException if the thread is interrupted. * * @deprecated Use {@link #load(InputStream)} to load a set of image layers from a tarball. Use * {@link #create(String, InputStream, ProgressHandler)} to create a single image from * the contents of a tarball. */ @Deprecated void load(String image, InputStream imagePayload, RegistryAuth registryAuth, ProgressHandler handler) throws DockerException, InterruptedException; /** * Load a set of images and tags from a tarball. * * @param imagePayload the image's payload (i.e.: the stream corresponding to the image's .tar * file). * @throws DockerException if a server error occurred (500). * @throws InterruptedException if the thread is interrupted. */ void load(InputStream imagePayload) throws DockerException, InterruptedException; /** * Creates a single image from a tarball. This method also tags the image * with the given image name upon loading completion. * * @param image the name to assign to the image. * @param imagePayload the image's payload (i.e.: the stream corresponding to the image's .tar * file). * @throws DockerException if a server error occurred (500). * @throws InterruptedException if the thread is interrupted. */ void create(String image, InputStream imagePayload) throws DockerException, InterruptedException; /** * Creates a single image from a tarball. This method also tags the image * with the given image name upon loading completion. * * @param image the name to assign to the image. * @param imagePayload the image's payload (i.e.: the stream corresponding to the image's .tar * file). * @param handler The handler to use for processing each progress message received from * Docker. * @throws DockerException if a server error occurred (500). * @throws InterruptedException if the thread is interrupted. */ void create(String image, InputStream imagePayload, ProgressHandler handler) throws DockerException, InterruptedException; /** * Get a tarball containing all images and metadata for the repository specified. * @param images the name(s) of one or more images to save. If a specific name and tag * (e.g. ubuntu:latest), then only that image (and its parents) are returned. * If an image ID, similarly only that image (and its parents) are returned, * but with the exclusion of the 'repositories' file in the tarball, * as there were no image names referenced. * @return the images' .tar streams. * @throws DockerException if a server error occurred (500). * @throws IOException if the server started returning, but an I/O error occurred in the * context of processing it on the client-side. * @throws InterruptedException if the thread is interrupted. */ InputStream save(String... images) throws DockerException, IOException, InterruptedException; /** * Get a tarball containing all images and metadata for the repository specified. * @param image the name or id of the image to save. If a specific name and tag * (e.g. ubuntu:latest), then only that image (and its parents) are returned. * If an image ID, similarly only that image (and its parents) are returned, * but with the exclusion of the 'repositories' file in the tarball, * as there were no image names referenced. * @param registryAuth the {@link RegistryAuth} needed to pull the image. * @return the image's .tar stream. * @throws DockerException if a server error occurred (500). * @throws IOException if the server started returning, but an I/O error occurred in the * context of processing it on the client-side. * @throws InterruptedException if the thread is interrupted. * * @deprecated RegistryAuth is not required. Use {@link #save(String...)}. */ @Deprecated InputStream save(String image, RegistryAuth registryAuth) throws DockerException, IOException, InterruptedException; /** * Get a tarball containing all images and metadata for one or more repositories. * @param images the name or id of the image to save. * if it is a specific name and tag (e.g. ubuntu:latest), then only that image * (and its parents) are returned; if it is an image ID, similarly only that * image (and its parents) are returned and there would be no names referenced * in the 'repositories' file for this image ID. * @return a tar stream containing the image(s) * @throws DockerException if a server error occurred (500). * @throws IOException if the server started returning, but an I/O error occurred in the * context of processing it on the client-side. * @throws InterruptedException if the thread is interrupted. */ InputStream saveMultiple(String... images) throws DockerException, IOException, InterruptedException; /** * List processes running inside the container by using ps. * * @param containerId the id of the container to examine * @return the titles and process list for the container * @throws DockerException if a server error occurred (500). * @throws InterruptedException if the thread is interrupted. */ TopResults topContainer(String containerId) throws DockerException, InterruptedException; /** * List processes running inside the container using ps and the given arguments. * * @param containerId the id of the container to examine * @param psArgs the arguments to pass to ps * inside the container, e.g., "-ef" * @return the titles and process list for the container * @throws DockerException if a server error occurred (500). * @throws InterruptedException if the thread is interrupted. */ TopResults topContainer(String containerId, String psArgs) throws DockerException, InterruptedException; /** * Pull a docker container image. * * @param image The image to pull. * @throws com.spotify.docker.client.exceptions.ImageNotFoundException * if image was not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void pull(String image) throws DockerException, InterruptedException; /** * Pull a docker container image, using a custom ProgressMessageHandler * * @param image The image to pull. * @param handler The handler to use for processing each progress message received from Docker. * @throws com.spotify.docker.client.exceptions.ImageNotFoundException * if image was not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void pull(String image, ProgressHandler handler) throws DockerException, InterruptedException; /** * Pull a private docker container image. * * @param image The image to pull. * @param registryAuth The {@link RegistryAuth} needed to pull the image. * @throws com.spotify.docker.client.exceptions.ImageNotFoundException * if image was not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void pull(String image, RegistryAuth registryAuth) throws DockerException, InterruptedException; /** * Pull a private docker container image, using a custom ProgressMessageHandler. * * @param image The image to pull. * @param registryAuth The {@link RegistryAuth} needed to pull the image. * @param handler The handler to use for processing each progress message received from * Docker. * @throws com.spotify.docker.client.exceptions.ImageNotFoundException * if image was not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void pull(String image, RegistryAuth registryAuth, ProgressHandler handler) throws DockerException, InterruptedException; /** * Push a docker container image. * * @param image The image to push. * @throws com.spotify.docker.client.exceptions.ImageNotFoundException * if image was not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void push(String image) throws DockerException, InterruptedException; /** * Push a docker container image, using a custom ProgressHandler * * @param image The image to push. * @param handler The handler to use for processing each progress message received from Docker. * @throws com.spotify.docker.client.exceptions.ImageNotFoundException * if image was not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void push(String image, ProgressHandler handler) throws DockerException, InterruptedException; void push(final String image, final RegistryAuth registryAuth) throws DockerException, InterruptedException; void push(final String image, final ProgressHandler handler, final RegistryAuth registryAuth) throws DockerException, InterruptedException; /** * Tag a docker image. * * @param image The image to tag. * @param name The new name that will be applied to the image. * @throws BadParamException * if one or more params were bad (400) * @throws ImageNotFoundException * if image was not found (404) * @throws ConflictException * conflict (409) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void tag(final String image, final String name) throws DockerException, InterruptedException; /** * Tag a docker image. * * @param image The image to tag. * @param name The new name that will be applied to the image. * @param force Whether to force the tagging even if the tag is already assigned to another * image. * @throws BadParamException * if one or more params were bad (400) * @throws ImageNotFoundException * if image was not found (404) * @throws ConflictException * conflict (409) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void tag(final String image, final String name, final boolean force) throws DockerException, InterruptedException; /** * Build a docker image. * * @param directory The directory containing the dockerfile. * @param params Additional flags to use during build. * @return The id of the built image if successful, otherwise null. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @throws IOException If some IO shit happened. */ String build(final Path directory, final BuildParam... params) throws DockerException, InterruptedException, IOException; /** * Build a docker image. * * @param directory The directory containing the dockerfile. * @param name The repository name and optional tag to apply to the built image. * @param params Additional flags to use during build. * @return The id of the built image if successful, otherwise null. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @throws IOException If some IO shit happened. */ String build(final Path directory, final String name, final BuildParam... params) throws DockerException, InterruptedException, IOException; /** * Build a docker image. * * @param directory The directory containing the dockerfile. * @param handler The handler to use for processing each progress message received from Docker. * @param params Additional flags to use during build. * @return The id of the built image if successful, otherwise null. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @throws IOException If some IO shit happened. */ String build(final Path directory, final ProgressHandler handler, final BuildParam... params) throws DockerException, InterruptedException, IOException; /** * Build a docker image. * * @param directory The directory containing the dockerfile. * @param name The repository name and optional tag to apply to the built image. * @param handler The handler to use for processing each progress message received from Docker. * @param params Additional flags to use during build. * @return The id of the built image if successful, otherwise null. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @throws IOException If some IO shit happened. */ String build(final Path directory, final String name, final ProgressHandler handler, final BuildParam... params) throws DockerException, InterruptedException, IOException; /** * Build a docker image. * * @param directory The directory containing the dockerfile. * @param name The repository name and optional tag to apply to the built image. * @param dockerfile The path within the build context to the Dockerfile * @param handler The handler to use for processing each progress message received from * Docker. * @param params Additional flags to use during build. * @return The id of the built image if successful, otherwise null. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @throws IOException If some IO shit happened. */ String build(final Path directory, final String name, final String dockerfile, final ProgressHandler handler, final BuildParam... params) throws DockerException, InterruptedException, IOException; /** * Flags which can be passed to the build method. */ class BuildParam { private final String name; private final String value; /** * Parameter name. * * @return name of parameter */ public String name() { return name; } /** * Repository name (and optionally a tag) to be applied to the * resulting image in case of success. * *

You could also pass the name explicitly to {@link #build(Path, String, BuildParam...)} * or one of the other build methods that takes an explicit name. * @param name A name to apply to the image * @return BuildParam */ public static BuildParam name(final String name) { return create("t", name); } /** * Parameter value. * * @return value of parameter */ public String value() { return value; } public BuildParam(final String name, final String value) { this.name = name; this.value = value; } /** * Create a custom parameter. * * @param name custom name * @param value custom value * @return BuildParam */ public static BuildParam create(final String name, final String value) { return new BuildParam(name, value); } /** * Suppress verbose build output. * * @return BuildParam */ public static BuildParam quiet() { return create("q", "true"); } /** * Remove intermediate containers after a successful build. * * @return BuildParam */ public static BuildParam rm() { return rm(true); } /** * Control whether to remove intermediate containers after a successful build. * * @param rm Whether to remove * @return BuildParam */ public static BuildParam rm(final boolean rm) { return create("rm", String.valueOf(rm)); } /** * Do not use the cache when building the image. * * @return BuildParam */ public static BuildParam noCache() { return create("nocache", "true"); } /** * Always remove intermediate containers. * * @return BuildParam */ public static BuildParam forceRm() { return create("forcerm", "true"); } /** * Always attempt to pull a newer version of the base image even if one exists locally. * * @return BuildParam */ public static BuildParam pullNewerImage() { return create("pull", "true"); } /** * path within the build context to the Dockerfile. This is ignored * if {@link #remote(URI)} is specified and points to an individual filename. * *

You could also pass the dockerfile path explicitly to * {@link #build(Path, String, String, ProgressHandler, BuildParam...)} * or one of the other build methods that takes an explicit dockerfile path. * @param dockerfile Path to the dockerfile in the build context. * @return BuildParam */ public static BuildParam dockerfile(final Path dockerfile) { return create("dockerfile", dockerfile.toString()); } /** * A Git repository URI or HTTP/HTTPS URI build source. If the URI * specifies a filename, the file's contents are placed into a file called `Dockerfile`. * * @param remote A Git repository URI or HTTP/HTTPS URI build source. * @return BuildParam */ public static BuildParam remote(final URI remote) { return create("remote", remote.toString()); } /** * Set memory limit for build. * @param memory Memory limit for build, in bytes. * @return BuildParam */ public static BuildParam memory(final Integer memory) { return create("memory", memory.toString()); } /** * Total memory (memory + swap). Set to -1 to enable unlimited swap. * @param totalMemory Total memory (memory + swap) in bytes. * @return BuildParam */ public static BuildParam totalMemory(final Integer totalMemory) { return create("memoryswap", totalMemory.toString()); } /** * CPU shares (relative weight). * @param cpuShares CPU shares (relative weight). * @return BuildParam */ public static BuildParam cpuShares(final Integer cpuShares) { return create("cpushares", cpuShares.toString()); } /** * CPUs in which to allow execution, e.g. 0-3, 0,1. * @param cpusetCpus CPUs in which to allow execution * @return BuildParam */ public static BuildParam cpusetCpus(final Integer cpusetCpus) { return create("cpusetcpus", cpusetCpus.toString()); } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } final BuildParam that = (BuildParam) obj; return Objects.equals(this.name, that.name) && Objects.equals(this.value, that.value); } @Override public int hashCode() { return Objects.hash(name, value); } } /** * Return the history of the image. * @param image An image name or ID. * @return A List of {@link ImageHistory} * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List history(final String image) throws InterruptedException, DockerException; /** * Create a docker container. * * @param config The container configuration. * @return Container creation result with container id and eventual warnings from docker. * @throws ImageNotFoundException * if the requested parent image was not found (404) * @throws DockerException if logs cannot be attached, because container is not running (406), * or if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ContainerCreation createContainer(ContainerConfig config) throws DockerException, InterruptedException; /** * Create a docker container. * * @param config The container configuration. * @param name The container name. * @return Container creation result with container id and eventual warnings from docker. * @throws ImageNotFoundException * if the requested parent image was not found (404) * @throws DockerException if logs cannot be attached, because container is not running (406), * or if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ContainerCreation createContainer(ContainerConfig config, String name) throws DockerException, InterruptedException; /** * Rename a docker container. * * @param containerId The id of the container to rename. * @param name The new name the container will have * @throws ContainerNotFoundException * if container cannot be found (404) * @throws ContainerRenameConflictException * if name is already assigned (409) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void renameContainer(String containerId, String name) throws DockerException, InterruptedException; /** * Start a docker container. * * @param containerId The id of the container to start. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void startContainer(String containerId) throws DockerException, InterruptedException; /** * Stop a docker container by sending a SIGTERM, and following up with a SIGKILL if the container * doesn't exit gracefully and in a timely manner. * * @param containerId The id of the container to stop. * @param secondsToWaitBeforeKilling Time to wait after SIGTERM before sending SIGKILL. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void stopContainer(String containerId, int secondsToWaitBeforeKilling) throws DockerException, InterruptedException; /** * Pause a docker container. * * @param containerId The id of the container to pause. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void pauseContainer(String containerId) throws DockerException, InterruptedException; /** * Unpause a docker container. * * @param containerId The id of the container to pause. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void unpauseContainer(String containerId) throws DockerException, InterruptedException; /** * Restart a docker container. with a 10 second default wait * * @param containerId The id of the container to restart. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void restartContainer(String containerId) throws DockerException, InterruptedException; /** * Restart a docker container. * * @param containerId The id of the container to restart. * @param secondsToWaitBeforeRestart number of seconds to wait before killing the container. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void restartContainer(String containerId, int secondsToWaitBeforeRestart) throws DockerException, InterruptedException; /** * Wait for a docker container to exit. * * @param containerId The id of the container to wait for. * @return Exit response with status code. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ContainerExit waitContainer(String containerId) throws DockerException, InterruptedException; /** * Kill a docker container. * Note: This implementation deviates from the Docker Remote API. The * latter accepts the kill signal as an argument. This implementation does * not accept the signal argument; instead, the default SIGKILL is sent. * * @param containerId The id of the container to kill. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void killContainer(String containerId) throws DockerException, InterruptedException; /** * Remove a docker container. * * @param containerId The id of the container to remove. * @throws BadParamException * if one or more params were bad (400) * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException If a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void removeContainer(String containerId) throws DockerException, InterruptedException; /** * Remove a docker container. * * @param containerId The id of the container to remove. * @param params {@link RemoveContainerParam} * @throws BadParamException * if one or more params were bad (400) * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException If a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void removeContainer(String containerId, RemoveContainerParam... params) throws DockerException, InterruptedException; /** * Remove a docker container. * * @param containerId The id of the container to remove. * @param removeVolumes Whether to remove volumes as well. * @throws BadParamException * if one or more params were bad (400) * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException If a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @deprecated Use {@link #removeContainer(String, RemoveContainerParam...)} */ @Deprecated void removeContainer(String containerId, boolean removeVolumes) throws DockerException, InterruptedException; /** * Parameters for {@link #removeContainer(String)}. */ class RemoveContainerParam { private final String name; private final String value; public RemoveContainerParam(final String name, final String value) { this.name = name; this.value = value; } /** * Parameter name. * * @return name of parameter */ public String name() { return name; } /** * Parameter value. * * @return value of parameter */ public String value() { return value; } /** * Create a custom parameter. * * @param name custom name * @param value custom value * @return BuildParam */ public static RemoveContainerParam create(final String name, final String value) { return new RemoveContainerParam(name, value); } /** * Remove the volumes associated to the container. If not specified, defaults to false. * * @return RemoveContainerParam */ public static RemoveContainerParam removeVolumes() { return removeVolumes(true); } /** * Remove the volumes associated to the container. If not specified, defaults to false. * * @param remove Whether to remove volumes * @return RemoveContainerParam */ public static RemoveContainerParam removeVolumes(final boolean remove) { return create("v", remove ? "1" : "0"); } /** * Kill then remove the container. If not specified, defaults to false. * * @return RemoveContainerParam */ public static RemoveContainerParam forceKill() { return forceKill(true); } /** * Kill then remove the container. If not specified, defaults to false. * * @param force Whether to force kill before removing. * @return RemoveContainerParam */ public static RemoveContainerParam forceKill(final boolean force) { return create("force", force ? "1" : "0"); } } /** * Export a docker container as a tar archive. * * @param containerId The id of the container to export. * @return A stream in tar format that contains the contents of the container file system. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ InputStream exportContainer(String containerId) throws DockerException, InterruptedException; /** * Copies some files out of a container. (removed on API version 1.24) * * @param containerId The id of the container to copy files from. * @param path The path inside of the container to copy. If this is a directory, it will * be copied recursively. If this is a file, only that file will be copied. * @return A stream in tar format that contains the copied files. If a directory was copied, the * directory will be at the root of the tar archive (so {@code copy(..., "/usr/share")} * will result in a directory called {@code share} in the tar archive). The directory * name is completely resolved, so copying {@code "/usr/share/././."} will still create * a directory called {@code "share"} in the tar archive. If a single file was copied, * that file will be the sole entry in the tar archive. Copying {@code "."} or * equivalently {@code "/"} will result in the tar archive containing a single folder * named after the container ID. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @throws UnsupportedApiVersionException * If client API is greater than or equal to 1.24 * @deprecated Replaced by {@link #archiveContainer(String, String)} in API 1.20, removed in 1.24. */ @Deprecated InputStream copyContainer(String containerId, String path) throws DockerException, InterruptedException; /** * Copies an archive out of a container. (API version 1.20+) * * @param containerId The id of the container to copy files from. * @param path The path inside of the container to copy. If this is a directory, it will * be copied recursively. If this is a file, only that file will be copied. * @return A stream in tar format that contains the copied files. If a directory was copied, the * directory will be at the root of the tar archive (so {@code copy(..., "/usr/share")} * will result in a directory called {@code share} in the tar archive). The directory name * is completely resolved, so copying {@code "/usr/share/././."} will still create a * directory called {@code "share"} in the tar archive. If a single file was copied, * that file will be the sole entry in the tar archive. Copying {@code "."} or * equivalently {@code "/"} will result in the tar archive containing a single folder * named after the container ID. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @since 1.20 */ InputStream archiveContainer(String containerId, String path) throws DockerException, InterruptedException; /** * Copies some files from host to container. (API version 1.20+) * * @param directory The path to sent to container * @param containerId The id of the container to sent files. * @param path The path inside of the container to put files. * @throws BadParamException * if one or more params were bad (400) * @throws PermissionException * if the volume or container root file system is marked "read only" * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException If a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @throws IOException If IOException * @since 1.20 */ void copyToContainer(final Path directory, String containerId, String path) throws DockerException, InterruptedException, IOException; /** * Inspect changes on a container's filesystem. * * @param containerId The id of the container. * @return A list of the changes to the container file system. * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List inspectContainerChanges(String containerId) throws DockerException, InterruptedException; /** * Get docker container logs. * * @param containerId The id of the container to get logs for. * @param params Params for controlling what streams to get and whether to tail or not. * @return A log message stream. * @throws BadParamException * if one or more params were bad (400) * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ LogStream logs(String containerId, LogsParam... params) throws DockerException, InterruptedException; /** * Watches the docker API for events. * *

This method is broken for Docker 1.7.x because of a Docker bug. * See https://github.com/docker/docker/issues/14354. * * @param params The parameters to apply to the events request * @return An event stream * @throws DockerException If a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ EventStream events(EventsParam... params) throws DockerException, InterruptedException; /** * Sets up an exec instance in a running container id. * * @param containerId The id of the container * @param cmd shell command * @param params Exec params * @return {@link ExecCreation} * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ExecCreation execCreate(String containerId, String[] cmd, ExecCreateParam... params) throws DockerException, InterruptedException; /** * Starts a previously set up exec instance id. If detach is true, this API returns after starting * the exec command. Otherwise, this API sets up an interactive session with the exec command. * * @param execId exec id * @param params Exec start params * @return exec output * @throws ExecNotFoundException * if exec instance is not found (404) * @throws com.spotify.docker.client.exceptions.ExecStartConflictException * if container is paused (409) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ LogStream execStart(String execId, ExecStartParameter... params) throws DockerException, InterruptedException; /** * Inspect the Swarm cluster. Only available in Docker API >= 1.24. * * @return Info about a swarm * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ Swarm inspectSwarm() throws DockerException, InterruptedException; /** * Create a new service. Only available in Docker API >= 1.24. * * @param spec the service spec * @return Service creation result with service id. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ServiceCreateResponse createService(ServiceSpec spec) throws DockerException, InterruptedException; /** * Create a new service. Only available in Docker API >= 1.24. * * @param spec the service spec * @param registryAuth the registry authentication configuration * @return Service creation result with service id. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ServiceCreateResponse createService(ServiceSpec spec, RegistryAuth registryAuth) throws DockerException, InterruptedException; /** * Inspect an existing service. Only available in Docker API >= 1.24. * * @param serviceId the id of the service to inspect * @return Info about the service * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ Service inspectService(String serviceId) throws DockerException, InterruptedException; /** * Update an existing service. Only available in Docker API >= 1.24. * * @param serviceId the identifier of the service * @param version the version of the service * @param spec the new service spec * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void updateService(String serviceId, Long version, ServiceSpec spec) throws DockerException, InterruptedException; /** * List all services. Only available in Docker API >= 1.24. * * @return A list of services. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List listServices() throws DockerException, InterruptedException; /** * List services that match the given criteria. Only available in Docker API >= 1.24. * * @param criteria Service listing and filtering options. * @return A list of {@link Service}s * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List listServices(Service.Criteria criteria) throws DockerException, InterruptedException; /** * Remove an existing service. Only available in Docker API >= 1.24. * * @param serviceId the id of the service to remove * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void removeService(String serviceId) throws DockerException, InterruptedException; /** * Inspect an existing task. Only available in Docker API >= 1.24. * * @param taskId the id of the task to inspect * @return Info about the task * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ Task inspectTask(String taskId) throws DockerException, InterruptedException; /** * List all tasks. Only available in Docker API >= 1.24. * * @return A list of tasks. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List listTasks() throws DockerException, InterruptedException; /** * List tasks that match the given criteria. Only available in Docker API >= 1.24. * * @param criteria {@link Task.Criteria} * @return A list of tasks. * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List listTasks(Task.Criteria criteria) throws DockerException, InterruptedException; /** * Supported parameters for {@link #execStart}. */ enum ExecStartParameter { DETACH("Detach"), TTY("Tty"); private final String name; ExecStartParameter(String name) { this.name = name; } public String getName() { return name; } } /** * Resizes the tty session used by an exec command. * This API is valid only if tty was specified as part * of {@link #execCreate(String, String[], ExecCreateParam...) creating} and * {@link #execStart(String, ExecStartParameter...) starting} the exec command. * @param execId exec id * @param height height of tty session * @param width width of tty session * * @throws BadParamException * if both height and width are null or zero * @throws ExecNotFoundException * if exec instance is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void execResizeTty(String execId, Integer height, Integer width) throws DockerException, InterruptedException; /** * Inspects a running or previously run exec instance id. * * @param execId exec id * @return state of this exec instance. * @throws ExecNotFoundException if exec instance is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ExecState execInspect(String execId) throws DockerException, InterruptedException; /** * Retrieves one-time stats (stream=0) for the container with the specified id. * * @param containerId The id of the container to retrieve stats for. * @return The container stats * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ ContainerStats stats(String containerId) throws DockerException, InterruptedException; /** * Resize container TTY * This API is valid only if tty was specified as * part of {@link #createContainer(ContainerConfig) creating} the container. * * @param containerId The id of the container whose TTY will be resized. * @param height New height of TTY * @param width New width of TTY * @throws BadParamException * if both height and width are null or zero * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void resizeTty(String containerId, Integer height, Integer width) throws DockerException, InterruptedException; /** * List all networks. * * @return networks * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ List listNetworks() throws DockerException, InterruptedException; /** * Inspect a specific network. * * @param networkId The id of the network * @return network information * @throws NetworkNotFoundException * if network is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ Network inspectNetwork(final String networkId) throws DockerException, InterruptedException; /** * Create a new network. * * @param networkConfig The network creation parameters * @return NetworkCreation * @throws NetworkNotFoundException * if network is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ NetworkCreation createNetwork(final NetworkConfig networkConfig) throws DockerException, InterruptedException; /** * Remove a docker network. * * @param networkId The id of the network to remove. * @throws NetworkNotFoundException * if network is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void removeNetwork(String networkId) throws DockerException, InterruptedException; /** * Connects a docker container to a network. * * @param containerId The id of the container to connect. * @param networkId The id of the network to connect. * @throws NotFoundException * if either container or network is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void connectToNetwork(String containerId, String networkId) throws DockerException, InterruptedException; /** * Disconnects a docker container to a network. * * @param containerId The id of the container to disconnect. * @param networkId The id of the network to disconnect. * @throws NotFoundException if either container or network is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted */ void disconnectFromNetwork(String containerId, String networkId) throws DockerException, InterruptedException; /** * Closes any and all underlying connections to docker, and release resources. */ @Override void close(); /** * Parameters for {@link #execCreate(String, String[], ExecCreateParam...)} */ class ExecCreateParam { private final String name; private final String value; private ExecCreateParam(final String name, final String value) { this.name = name; this.value = value; } public String name() { return name; } public String value() { return value; } private static ExecCreateParam create(final String name, final String value) { return new ExecCreateParam(name, value); } /** * Execute in detached mode * * @param detach Whether to detach. * @return ExecCreateParam */ public static ExecCreateParam detach(final boolean detach) { return create("Detach", String.valueOf(detach)); } /** * Execute in detached mode. * * @return ExecCreateParam */ public static ExecCreateParam detach() { return detach(true); } /** * Attach stdin * * @param attachStdin Whether to attach the standard input which allows user interaction. * @return ExecCreateParam */ public static ExecCreateParam attachStdin(final boolean attachStdin) { return create("AttachStdin", String.valueOf(attachStdin)); } /** * Attach standard input. * * @return ExecCreateParam */ public static ExecCreateParam attachStdin() { return attachStdin(true); } /** * Attach standard error. * * @param attachStderr Whether to attach standout error * @return ExecCreateParam */ public static ExecCreateParam attachStderr(final boolean attachStderr) { return create("AttachStderr", String.valueOf(attachStderr)); } /** * Attach standard error. * * @return ExecCreateParam */ public static ExecCreateParam attachStderr() { return attachStderr(true); } /** * Attach standard ouput. * * @param attachStdout Whether to attach standard output * @return ExecCreateParam */ public static ExecCreateParam attachStdout(final boolean attachStdout) { return create("AttachStdout", String.valueOf(attachStdout)); } /** * Attach standard ouput. * * @return ExecCreateParam */ public static ExecCreateParam attachStdout() { return attachStdout(true); } /** * Give extended privileges to the command. * * @param privileged Whether to give extended privileges to the command * @return ExecCreateParam */ public static ExecCreateParam privileged(final boolean privileged) { return create("Privileged", String.valueOf(privileged)); } /** * Give extended privileges to the command. * * @return ExecCreateParam */ public static ExecCreateParam privileged() { return privileged(true); } /** * Attach standard streams to a tty. * * @param tty Whether to attach standard streams to a tty. * @return ExecCreateParam */ public static ExecCreateParam tty(final boolean tty) { return create("Tty", String.valueOf(tty)); } /** * Attach standard streams to a tty. * * @return ExecCreateParam */ public static ExecCreateParam tty() { return tty(true); } /** * User that will run the command. * * @param user user * @return ExecCreateParam */ public static ExecCreateParam user(final String user) { return create("User", user); } } /** * Parameters for {@link #logs(String, LogsParam...)} */ class LogsParam { private final String name; private final String value; public LogsParam(final String name, final String value) { this.name = name; this.value = value; } /** * Parameter name. * * @return name of parameter */ public String name() { return name; } /** * Parameter value. * * @return value of parameter */ public String value() { return value; } /** * Return stream. * * @return LogsParam */ public static LogsParam follow() { return follow(true); } /** * Return stream. Default false. * * @param follow Whether to return stream. * @return LogsParam */ public static LogsParam follow(final boolean follow) { return create("follow", String.valueOf(follow)); } /** * Show stdout log. * * @return LogsParam */ public static LogsParam stdout() { return stdout(true); } /** * Show stdout log. Default false. * * @param stdout Whether to show stdout log. * @return LogsParam */ public static LogsParam stdout(final boolean stdout) { return create("stdout", String.valueOf(stdout)); } /** * Show stderr log. * * @return LogsParam */ public static LogsParam stderr() { return stderr(true); } /** * Show stderr log. Default false. * * @param stderr Whether to show stderr log. * @return LogsParam */ public static LogsParam stderr(final boolean stderr) { return create("stderr", String.valueOf(stderr)); } /** * Filter logs and only output entries since given Unix timestamp. Only available in Docker API * >= 1.19. * * @param timestamp Only output entries since timestamp. * @return LogsParam */ public static LogsParam since(final Integer timestamp) { return create("since", String.valueOf(timestamp)); } /** * Print timestamp for every log line. * * @return LogsParam */ public static LogsParam timestamps() { return timestamps(true); } /** * Print timestamp for every log line. Default false. * * @param timestamps Whether to print timestamp for every log line. * @return LogsParam */ public static LogsParam timestamps(final boolean timestamps) { return create("timestamps", String.valueOf(timestamps)); } /** * Output specified number of lines at the end of logs. * * @param lines Number of lines to output at the end of logs. * @return LogsParam */ public static LogsParam tail(final Integer lines) { return create("tail", String.valueOf(lines)); } /** * Create a custom parameter. * * @param name custom name * @param value custom value * @return LogsParam */ public static LogsParam create(final String name, final String value) { return new LogsParam(name, value); } } /** * Parameters for {@link #attachContainer(String, AttachParameter...)} */ enum AttachParameter { LOGS, STREAM, STDIN, STDOUT, STDERR } /** * Attach to the container id. * * @param containerId The id of the container to get logs for. * @param params Params for controlling what streams to get and whether to tail or not. * @return A log message stream. * @throws BadParamException * if one or more params were bad (400) * @throws ContainerNotFoundException * if container is not found (404) * @throws DockerException if a server error occurred (500) * @throws InterruptedException If the thread is interrupted * @throws IllegalStateException If the container is not running */ LogStream attachContainer(String containerId, AttachParameter... params) throws DockerException, InterruptedException; /** * Get the Docker host address. * * @return the docker host name or IP */ String getHost(); /** * Parameters for {@link #listContainers(ListContainersParam...)} */ class ListContainersParam { private final String name; private final String value; public ListContainersParam(final String name, final String value) { this.name = name; this.value = value; } /** * Create a custom parameter. * * @param name custom name * @param value custom value * @return ListContainersParam */ public static ListContainersParam create(final String name, final String value) { return new ListContainersParam(name, value); } /** * Create a "filters" query param from a key/value pair. * * @param key Type of filter * @param value Value of filter * @return ListContainersParam */ public static ListContainersParam filter(final String key, final String value) { return new ListContainersFilterParam(key, value); } /** * Parameter name. * * @return name of parameter */ public String name() { return name; } /** * Parameter value. * * @return value of parameter */ public String value() { return value; } /** * Show all containers. Only running containers are shown by default * * @return ListContainersParam */ public static ListContainersParam allContainers() { return allContainers(true); } /** * Show all containers. Only running containers are shown by default * * @param all Whether to show all containers * @return ListContainersParam */ public static ListContainersParam allContainers(final boolean all) { return create("all", all ? "1" : "0"); } /** * Show limit last created containers, include non-running ones. * * @param limit Limit for number of containers to list * @return ListContainersParam */ public static ListContainersParam limitContainers(final Integer limit) { return create("limit", String.valueOf(limit)); } /** * Show only containers created since id, include non-running ones. * * @param id container ID * @return ListContainersParam */ public static ListContainersParam containersCreatedSince(final String id) { return create("since", id); } /** * Show only containers created before id, include non-running ones. * * @param id container ID * @return ListContainersParam */ public static ListContainersParam containersCreatedBefore(final String id) { return create("before", String.valueOf(id)); } /** * Show the containers sizes. * * @param size Whether to show container sizes * @return ListContainersParam */ public static ListContainersParam withContainerSizes(final Boolean size) { return create("size", String.valueOf(size)); } /** * Show exited containers with given exit status. * * @param exitStatus Integer exit status * @return ListContainersParam */ public static ListContainersParam withExitStatus(final int exitStatus) { return filter("exited", String.valueOf(exitStatus)); } /** * Show created containers. * * @return ListContainersParam */ public static ListContainersParam withStatusCreated() { return filter("status", "created"); } /** * Show restarting containers. * * @return ListContainersParam */ public static ListContainersParam withStatusRestarting() { return filter("status", "restarting"); } /** * Show running containers. * * @return ListContainersParam */ public static ListContainersParam withStatusRunning() { return filter("status", "running"); } /** * Show paused containers. * * @return ListContainersParam */ public static ListContainersParam withStatusPaused() { return filter("status", "paused"); } /** * Show exited containers. * * @return ListContainersParam */ public static ListContainersParam withStatusExited() { return filter("status", "exited"); } /** * Show exited containers. * * @return ListContainersParam * @deprecated Replaced by {@link #withStatusExited()} */ @Deprecated public static ListContainersParam exitedContainers() { return withStatusExited(); } /** * Show containers with a label value. * * @param label The label to filter on * @param value The value of the label * @return ListContainersParam */ public static ListContainersParam withLabel(final String label, final String value) { return isNullOrEmpty(value) ? filter("label", label) : filter("label", label + "=" + value); } /** * Show containers with a label. * * @param label The label to filter on * @return ListContainersParam */ public static ListContainersParam withLabel(final String label) { return withLabel(label, null); } } class ListContainersFilterParam extends ListContainersParam { public ListContainersFilterParam(String name, String value) { super(name, value); } } /** * Parameters for {@link #listImages(ListImagesParam...)}. */ class ListImagesParam { private final String name; private final String value; public ListImagesParam(final String name, final String value) { this.name = name; this.value = value; } /** * Create a custom parameter. * * @param name of parameter * @param value of parameter * @return ListImagesParam */ public static ListImagesParam create(final String name, final String value) { return new ListImagesParam(name, value); } /** * Create a custom filter. * * @param name of filter * @param value of filter * @return ListImagesParam */ public static ListImagesParam filter(final String name, final String value) { return new ListImagesFilterParam(name, value); } /** * Parameter name. * * @return name of parameter */ public String name() { return name; } /** * Parameter value. * * @return value of parameter */ public String value() { return value; } /** * Show all images. Only intermediate image layers are shown by default. * * @return ListImagesParam */ public static ListImagesParam allImages() { return allImages(true); } /** * Show all images. Only intermediate image layers are shown by default. * * @param all Whether to list all images * @return ListImagesParam */ public static ListImagesParam allImages(final boolean all) { return create("all", String.valueOf(all)); } /** * Show digests. * * @return ListImagesParam */ public static ListImagesParam digests() { return create("digests", "1"); } /** * Show dangling images only. A dangling image is one which does not have a repository name. By * default both dangling and non-dangling will be shown. * * @return ListImagesParam */ public static ListImagesParam danglingImages() { return danglingImages(true); } /** * Enable or disable dangling image filter. * * @param dangling Whether to list dangling images * @return ListImagesParam */ public static ListImagesParam danglingImages(final boolean dangling) { return filter("dangling", String.valueOf(dangling)); } /** * Show images with a label value. * * @param label The label to filter on * @param value The value of the label * @return ListImagesParam */ public static ListImagesParam withLabel(final String label, final String value) { return isNullOrEmpty(value) ? filter("label", label) : filter("label", label + "=" + value); } /** * Show images with a label. * * @param label The label to filter on * @return ListImagesParam */ public static ListImagesParam withLabel(final String label) { return withLabel(label, null); } /** * Show images by name. Can use RepoTags or RepoDigests as valid inputs. * * @param name Name of the image to filter on * @return ListImagesParam */ public static ListImagesParam byName(final String name) { return create("filter", name); } } /** * Filter parameter for {@link #listImages(ListImagesParam...)}. This should be used by * ListImagesParam only. */ class ListImagesFilterParam extends ListImagesParam { public ListImagesFilterParam(String name, String value) { super(name, value); } } /** * Parameters for {@link #events(EventsParam...)} */ class EventsParam { private final String name; private final String value; private EventsParam(final String name, final String value) { this.name = name; this.value = value; } /** * Parameter name. * * @return The name */ public String name() { return name; } /** * Parameter value. * * @return The value */ public String value() { return value; } /** * Filter events until the given timestamp * * @param until Return events up until this Unix timestamp. * @return {@link EventsParam} * @since API 1.18 */ public static EventsParam until(final Long until) { return new EventsParam("until", String.valueOf(until)); } /** * Filter events since the given timestamp * * @param since Return events since this Unix timestamp. * @return {@link EventsParam} * @since API 1.18 */ public static EventsParam since(final Long since) { return new EventsParam("since", String.valueOf(since)); } /** * Apply filters to the returned events. * * @param name Name * @param value Value * @return {@link EventsParam} * @since API 1.18 */ private static EventsParam filter(final String name, final String value) { return new EventsFilterParam(name, value); } /** * Show only certain events. For example, "event=pull" for image pull events. * @param event Type of event to show * @return EventsParam * @since API 1.18 */ public static EventsParam event(final String event) { return filter("event", event); } /** * Show events for an image. * @param image An image tag or id * @return EventsParam * @since API 1.18 */ public static EventsParam image(final String image) { return filter("image", image); } /** * Show events for a container. * @param container A container name or id * @return EventsParam * @since API 1.18 */ public static EventsParam container(final String container) { return filter("container", container); } /** * Show events for a volume. * @param volume A volume name or id * @return EventsParam * @since API 1.22 */ public static EventsParam volume(final String volume) { return filter("volume", volume); } /** * Show events for a network. * @param network A network name or id * @return EventsParam * @since API 1.22 */ public static EventsParam network(final String network) { return filter("network", network); } /** * Show events for a daemon. * @param daemon A daemon name or id * @return EventsParam * @since API 1.24 */ public static EventsParam daemon(final String daemon) { return filter("daemon", daemon); } /** * Show events of a given type. For instance, "type=image" for all image events. * @param type A type of event. Possible values: container, image, volume, network, or daemon * @return EventsParam * @deprecated Use {@link #type(Event.Type)}. * @since API 1.22 */ @Deprecated public static EventsParam type(final String type) { return filter("type", type); } /** * Show events of a given type. For instance, "type=image" for all image events. * @param type A type of event. Possible values: container, image, volume, network, or daemon * @return EventsParam * @since API 1.22 */ public static EventsParam type(final Event.Type type) { return filter("type", type.getName()); } /** * Show events with a label value. * * @param label The label to filter on * @param value The value of the label * @return EventsParam * @since API 1.21 */ public static EventsParam label(final String label, final String value) { return isNullOrEmpty(value) ? filter("label", label) : filter("label", label + "=" + value); } /** * Show events with a label value. * * @param label The label to filter on * @return EventsParam * @since API 1.21 */ public static EventsParam label(final String label) { return label(label, null); } } /** * Filter parameter for {@link #events(EventsParam...)}. This should be used by EventsParam only. */ class EventsFilterParam extends EventsParam { public EventsFilterParam(String name, String value) { super(name, value); } } Volume createVolume() throws DockerException, InterruptedException; Volume createVolume(Volume volume) throws DockerException, InterruptedException; Volume inspectVolume(String volumeName) throws DockerException, InterruptedException; void removeVolume(Volume volume) throws DockerException, InterruptedException; void removeVolume(String volumeName) throws DockerException, InterruptedException; VolumeList listVolumes(ListVolumesParam... params) throws DockerException, InterruptedException; /** * Parameters for {@link #listVolumes(ListVolumesParam...)}. * @since Docker 1.9, API version 1.21 */ class ListVolumesParam { private final String name; private final String value; private ListVolumesParam(final String name, final String value) { this.name = name; this.value = value; } /** * Parameter name. * * @return name of parameter * @since Docker 1.9, API version 1.21 */ public String name() { return name; } /** * Filter volumes by name. * @param name Matches all or part of a volume name. * @return ListVolumesParam * @since Docker 1.12, API version 1.24 */ public static ListVolumesParam name(final String name) { return filter("name", name); } /** * Parameter value. * * @return value of parameter * @since Docker 1.9, API version 1.21 */ public String value() { return value; } /** * Create a custom filter. * * @param name of filter * @param value of filter * @return ListVolumesParam * @since Docker 1.9, API version 1.21 */ public static ListVolumesParam filter(final String name, final String value) { return new ListVolumesFilterParam(name, value); } /** * Show dangling volumes only. * A dangling volume is one which is not referenced by any container. * By default both dangling and non-dangling will be shown. * * @return ListVolumesParam * @since Docker 1.9, API version 1.21 */ public static ListVolumesParam dangling() { return dangling(true); } /** * Enable or disable dangling volume filter. * * @param dangling Whether to list dangling images * @return ListVolumesParam */ public static ListVolumesParam dangling(final Boolean dangling) { return filter("dangling", dangling.toString()); } /** * Filter volumes by volume driver. * @param driver Matches all or part of a volume driver name. * @return ListVolumesParam * @since Docker 1.12, API version 1.24 */ public static ListVolumesParam driver(final String driver) { return filter("driver", driver); } } /** * Filter parameter for {@link #listVolumes(ListVolumesParam...)}. This should be used by * ListVolumesParam only. * @since Docker 1.9, API version 1.21 */ class ListVolumesFilterParam extends ListVolumesParam { public ListVolumesFilterParam(String name, String value) { super(name, value); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy