diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 7dec19aef..9bcef2d88 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -4,5 +4,13 @@ updates:
directory: "/"
schedule:
interval: weekly
+ day: monday
open-pull-requests-limit: 99
rebase-strategy: disabled
+ ignore:
+ - dependency-name: "org.glassfish.jersey.connectors:jersey-apache-connector"
+ update-types: [ "version-update:semver-major" ]
+ - dependency-name: "org.glassfish.jersey.core:jersey-client"
+ update-types: [ "version-update:semver-major" ]
+ - dependency-name: "org.glassfish.jersey.inject:jersey-hk2"
+ update-types: [ "version-update:semver-major" ]
diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml
index d03b3f5f5..f570cce43 100644
--- a/.github/release-drafter.yml
+++ b/.github/release-drafter.yml
@@ -1,5 +1,5 @@
tag-template: $NEXT_PATCH_VERSION
-name-template: '$NEXT_PATCH_VERSION 🌈'
+name-template: '$NEXT_PATCH_VERSION'
categories:
- title: '🚀 Features'
labels:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b7aaef550..5a87a3c3f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -7,7 +7,7 @@ on:
jobs:
build:
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
@@ -15,19 +15,18 @@ jobs:
- { name: "default", javaVersion: 8 }
- { name: "default", javaVersion: 17 }
- { name: "default", javaVersion: 21 }
- - { name: "Docker 19.03.9", dockerVersion: "v19.03.9", javaVersion: 8 }
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set up JDK
- uses: actions/setup-java@v4
+ uses: actions/setup-java@v5
with:
java-version: ${{matrix.javaVersion}}
distribution: temurin
+ cache: maven
- name: Configure Docker
id: setup_docker
uses: docker/setup-docker-action@v4
with:
- version: ${{matrix.dockerVersion}}
channel: stable
- name: Build with Maven
env:
@@ -35,14 +34,15 @@ jobs:
run: ./mvnw --no-transfer-progress verify
tcp:
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set up JDK
- uses: actions/setup-java@v4
+ uses: actions/setup-java@v5
with:
java-version: 8
distribution: temurin
+ cache: maven
- name: Configure Docker
id: setup_docker
uses: docker/setup-docker-action@v4
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 1517a1167..d3ddc4b2e 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -8,23 +8,25 @@ on:
jobs:
build:
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set up JDK 8
- uses: actions/setup-java@v4
+ uses: actions/setup-java@v5
with:
java-version: 8
distribution: temurin
- server-id: default
+ server-id: central
server-username: MAVEN_USERNAME
server-password: MAVEN_CENTRAL_TOKEN
+ gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
+ gpg-passphrase: MAVEN_GPG_PASSPHRASE
- name: Set version
run: ./mvnw versions:set -DnewVersion="${{github.event.release.tag_name}}"
# TODO check main's CI status
- name: Deploy with Maven
env:
- MAVEN_DEPLOYMENT_REPOSITORY: ${{ secrets.MAVEN_DEPLOYMENT_REPOSITORY }}
- MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
- MAVEN_CENTRAL_TOKEN: ${{ secrets.OSSRH_PASSWORD }}
- run: ./mvnw deploy -DaltReleaseDeploymentRepository="$MAVEN_DEPLOYMENT_REPOSITORY" -DskipTests
+ MAVEN_USERNAME: ${{ secrets.SONATYPE_CENTRAL_USERNAME }}
+ MAVEN_CENTRAL_TOKEN: ${{ secrets.SONATYPE_CENTRAL_PASSWORD }}
+ MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
+ run: ./mvnw -Prelease deploy -DskipTests
diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java
deleted file mode 100644
index b901097f2..000000000
--- a/.mvn/wrapper/MavenWrapperDownloader.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2007-present the original author or authors.
- *
- * 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.
- */
-import java.net.*;
-import java.io.*;
-import java.nio.channels.*;
-import java.util.Properties;
-
-public class MavenWrapperDownloader {
-
- private static final String WRAPPER_VERSION = "0.5.6";
- /**
- * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
- */
- private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
- + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
-
- /**
- * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
- * use instead of the default one.
- */
- private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
- ".mvn/wrapper/maven-wrapper.properties";
-
- /**
- * Path where the maven-wrapper.jar will be saved to.
- */
- private static final String MAVEN_WRAPPER_JAR_PATH =
- ".mvn/wrapper/maven-wrapper.jar";
-
- /**
- * Name of the property which should be used to override the default download url for the wrapper.
- */
- private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
-
- public static void main(String args[]) {
- System.out.println("- Downloader started");
- File baseDirectory = new File(args[0]);
- System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
-
- // If the maven-wrapper.properties exists, read it and check if it contains a custom
- // wrapperUrl parameter.
- File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
- String url = DEFAULT_DOWNLOAD_URL;
- if(mavenWrapperPropertyFile.exists()) {
- FileInputStream mavenWrapperPropertyFileInputStream = null;
- try {
- mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
- Properties mavenWrapperProperties = new Properties();
- mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
- url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
- } catch (IOException e) {
- System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
- } finally {
- try {
- if(mavenWrapperPropertyFileInputStream != null) {
- mavenWrapperPropertyFileInputStream.close();
- }
- } catch (IOException e) {
- // Ignore ...
- }
- }
- }
- System.out.println("- Downloading from: " + url);
-
- File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
- if(!outputFile.getParentFile().exists()) {
- if(!outputFile.getParentFile().mkdirs()) {
- System.out.println(
- "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
- }
- }
- System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
- try {
- downloadFileFromURL(url, outputFile);
- System.out.println("Done");
- System.exit(0);
- } catch (Throwable e) {
- System.out.println("- Error downloading");
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- private static void downloadFileFromURL(String urlString, File destination) throws Exception {
- if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
- String username = System.getenv("MVNW_USERNAME");
- char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
- Authenticator.setDefault(new Authenticator() {
- @Override
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(username, password);
- }
- });
- }
- URL website = new URL(urlString);
- ReadableByteChannel rbc;
- rbc = Channels.newChannel(website.openStream());
- FileOutputStream fos = new FileOutputStream(destination);
- fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
- fos.close();
- rbc.close();
- }
-
-}
diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index 2cc7d4a55..000000000
Binary files a/.mvn/wrapper/maven-wrapper.jar and /dev/null differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
index 642d572ce..8dea6c227 100644
--- a/.mvn/wrapper/maven-wrapper.properties
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -1,2 +1,3 @@
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
-wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
+wrapperVersion=3.3.4
+distributionType=only-script
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
diff --git a/circle.sh b/circle.sh
index c84ca3fe6..b5b7cdbb0 100755
--- a/circle.sh
+++ b/circle.sh
@@ -6,7 +6,7 @@ case "$1" in
mkdir .docker
cp $CIRCLE_PROJECT_REPONAME/etc/certs/* .docker
- # configure docker deamon to use SSL and provide the path to the certificates
+ # configure docker daemon to use SSL and provide the path to the certificates
docker_opts='DOCKER_OPTS="$DOCKER_OPTS -H tcp://127.0.0.1:2376 --tlsverify --tlscacert='$HOME'/.docker/ca.pem --tlscert='$HOME'/.docker/server-cert.pem --tlskey='$HOME'/.docker/server-key.pem"'
sudo sh -c "echo '$docker_opts' >> /etc/default/docker"
diff --git a/docker-java-api/pom.xml b/docker-java-api/pom.xml
index 82d176e38..dda682ab1 100644
--- a/docker-java-api/pom.xml
+++ b/docker-java-api/pom.xml
@@ -23,7 +23,7 @@
com.fasterxml.jackson.core
jackson-annotations
- ${jackson.version}
+ 2.20
@@ -42,7 +42,7 @@
org.projectlombok
lombok
- 1.18.30
+ 1.18.38
provided
@@ -50,14 +50,14 @@
org.junit.jupiter
junit-jupiter
- 5.10.0
+ 5.13.4
test
com.tngtech.archunit
archunit-junit5
- 0.18.0
+ 1.4.1
test
@@ -84,6 +84,18 @@
com.github.siom79.japicmp
japicmp-maven-plugin
+
+
+
+ com.github.dockerjava.api.command.UpdateContainerCmd#getCpuPeriod()
+ com.github.dockerjava.api.command.UpdateContainerCmd#withCpuPeriod(java.lang.Integer)
+ com.github.dockerjava.api.command.UpdateContainerCmd#getCpuQuota()
+ com.github.dockerjava.api.command.UpdateContainerCmd#withCpuQuota(java.lang.Integer)
+ com.github.dockerjava.api.command.InspectContainerResponse#getSizeRootFs()
+ com.github.dockerjava.api.command.InspectContainerResponse#getSizeRw()
+
+
+
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/DockerClient.java b/docker-java-api/src/main/java/com/github/dockerjava/api/DockerClient.java
index e5f57e1bb..bf6acdee0 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/DockerClient.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/DockerClient.java
@@ -6,6 +6,7 @@
import com.github.dockerjava.api.command.CommitCmd;
import com.github.dockerjava.api.command.ConnectToNetworkCmd;
import com.github.dockerjava.api.command.ContainerDiffCmd;
+import com.github.dockerjava.api.command.ExportContainerCmd;
import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd;
import com.github.dockerjava.api.command.CopyArchiveToContainerCmd;
import com.github.dockerjava.api.command.CopyFileFromContainerCmd;
@@ -26,6 +27,7 @@
import com.github.dockerjava.api.command.InspectContainerCmd;
import com.github.dockerjava.api.command.InspectExecCmd;
import com.github.dockerjava.api.command.InspectImageCmd;
+import com.github.dockerjava.api.command.ImageHistoryCmd;
import com.github.dockerjava.api.command.InspectNetworkCmd;
import com.github.dockerjava.api.command.InspectServiceCmd;
import com.github.dockerjava.api.command.InspectSwarmCmd;
@@ -142,6 +144,8 @@ public interface DockerClient extends Closeable {
InspectImageCmd inspectImageCmd(@Nonnull String imageId);
+ ImageHistoryCmd imageHistoryCmd(@Nonnull String imageId);
+
/**
* @param name
* The name, e.g. "alexec/busybox" or just "busybox" if you want to default. Not null.
@@ -230,6 +234,15 @@ public interface DockerClient extends Closeable {
ContainerDiffCmd containerDiffCmd(@Nonnull String containerId);
+ /**
+ * Export the contents of a container's filesystem as a tar archive.
+ *
+ * @param containerId
+ * id of the container
+ * @return created command
+ */
+ ExportContainerCmd exportContainerCmd(@Nonnull String containerId);
+
StopContainerCmd stopContainerCmd(@Nonnull String containerId);
KillContainerCmd killContainerCmd(@Nonnull String containerId);
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/DockerClientDelegate.java b/docker-java-api/src/main/java/com/github/dockerjava/api/DockerClientDelegate.java
index 5de64641f..da600bd4d 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/DockerClientDelegate.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/DockerClientDelegate.java
@@ -6,6 +6,7 @@
import com.github.dockerjava.api.command.CommitCmd;
import com.github.dockerjava.api.command.ConnectToNetworkCmd;
import com.github.dockerjava.api.command.ContainerDiffCmd;
+import com.github.dockerjava.api.command.ExportContainerCmd;
import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd;
import com.github.dockerjava.api.command.CopyArchiveToContainerCmd;
import com.github.dockerjava.api.command.CopyFileFromContainerCmd;
@@ -26,6 +27,7 @@
import com.github.dockerjava.api.command.InspectContainerCmd;
import com.github.dockerjava.api.command.InspectExecCmd;
import com.github.dockerjava.api.command.InspectImageCmd;
+import com.github.dockerjava.api.command.ImageHistoryCmd;
import com.github.dockerjava.api.command.InspectNetworkCmd;
import com.github.dockerjava.api.command.InspectServiceCmd;
import com.github.dockerjava.api.command.InspectSwarmCmd;
@@ -179,6 +181,11 @@ public InspectImageCmd inspectImageCmd(@Nonnull String imageId) {
return getDockerClient().inspectImageCmd(imageId);
}
+ @Override
+ public ImageHistoryCmd imageHistoryCmd(@Nonnull String imageId) {
+ return getDockerClient().imageHistoryCmd(imageId);
+ }
+
@Override
public SaveImageCmd saveImageCmd(@Nonnull String name) {
return getDockerClient().saveImageCmd(name);
@@ -270,6 +277,11 @@ public ContainerDiffCmd containerDiffCmd(@Nonnull String containerId) {
return getDockerClient().containerDiffCmd(containerId);
}
+ @Override
+ public ExportContainerCmd exportContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().exportContainerCmd(containerId);
+ }
+
@Override
public StopContainerCmd stopContainerCmd(@Nonnull String containerId) {
return getDockerClient().stopContainerCmd(containerId);
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/DelegatingDockerCmdExecFactory.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/DelegatingDockerCmdExecFactory.java
index 161ff2c29..d7cdd97a9 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/DelegatingDockerCmdExecFactory.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/DelegatingDockerCmdExecFactory.java
@@ -100,6 +100,11 @@ public InspectImageCmd.Exec createInspectImageCmdExec() {
return getDockerCmdExecFactory().createInspectImageCmdExec();
}
+ @Override
+ public ImageHistoryCmd.Exec createImageHistoryCmdExec() {
+ return getDockerCmdExecFactory().createImageHistoryCmdExec();
+ }
+
@Override
public ListContainersCmd.Exec createListContainersCmdExec() {
return getDockerCmdExecFactory().createListContainersCmdExec();
@@ -175,6 +180,11 @@ public ContainerDiffCmd.Exec createContainerDiffCmdExec() {
return getDockerCmdExecFactory().createContainerDiffCmdExec();
}
+ @Override
+ public ExportContainerCmd.Exec createExportContainerCmdExec() {
+ return getDockerCmdExecFactory().createExportContainerCmdExec();
+ }
+
@Override
public KillContainerCmd.Exec createKillContainerCmdExec() {
return getDockerCmdExecFactory().createKillContainerCmdExec();
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java
index cedf6d40d..bdf39269d 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java
@@ -37,6 +37,8 @@ public interface DockerCmdExecFactory extends Closeable {
InspectImageCmd.Exec createInspectImageCmdExec();
+ ImageHistoryCmd.Exec createImageHistoryCmdExec();
+
ListContainersCmd.Exec createListContainersCmdExec();
CreateContainerCmd.Exec createCreateContainerCmdExec();
@@ -71,6 +73,8 @@ public interface DockerCmdExecFactory extends Closeable {
ContainerDiffCmd.Exec createContainerDiffCmdExec();
+ ExportContainerCmd.Exec createExportContainerCmdExec();
+
KillContainerCmd.Exec createKillContainerCmdExec();
UpdateContainerCmd.Exec createUpdateContainerCmdExec();
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ExportContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ExportContainerCmd.java
new file mode 100644
index 000000000..bef73d261
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ExportContainerCmd.java
@@ -0,0 +1,31 @@
+package com.github.dockerjava.api.command;
+
+import java.io.InputStream;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+import com.github.dockerjava.api.exception.NotFoundException;
+
+/**
+ * Export the contents of a container as a tar archive.
+ */
+public interface ExportContainerCmd extends SyncDockerCmd {
+
+ @CheckForNull
+ String getContainerId();
+
+ ExportContainerCmd withContainerId(@Nonnull String containerId);
+
+ /**
+ * Its the responsibility of the caller to consume and/or close the {@link InputStream} to prevent connection leaks.
+ *
+ * @throws NotFoundException
+ * No such container
+ */
+ @Override
+ InputStream exec() throws NotFoundException;
+
+ interface Exec extends DockerCmdSyncExec {
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ImageHistoryCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ImageHistoryCmd.java
new file mode 100644
index 000000000..d93796ad2
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ImageHistoryCmd.java
@@ -0,0 +1,31 @@
+package com.github.dockerjava.api.command;
+
+import java.util.List;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+import com.github.dockerjava.api.exception.NotFoundException;
+import com.github.dockerjava.api.model.ImageHistory;
+
+/**
+ * Get the history of an image.
+ */
+public interface ImageHistoryCmd extends SyncDockerCmd> {
+
+ @CheckForNull
+ String getImageId();
+
+ ImageHistoryCmd withImageId(@Nonnull String imageId);
+
+ /**
+ * @throws NotFoundException
+ * No such image
+ */
+ @Override
+ List exec() throws NotFoundException;
+
+ interface Exec extends DockerCmdSyncExec> {
+ }
+
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java
index 94207fd2c..f06bd4ed9 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java
@@ -61,10 +61,10 @@ public class InspectContainerResponse extends DockerObject {
private String id;
@JsonProperty("SizeRootFs")
- private Integer sizeRootFs;
+ private Long sizeRootFs;
@JsonProperty("SizeRw")
- private Integer sizeRw;
+ private Long sizeRw;
@JsonProperty("Image")
private String imageId;
@@ -124,11 +124,11 @@ public String getId() {
return id;
}
- public Integer getSizeRootFs() {
+ public Long getSizeRootFs() {
return sizeRootFs;
}
- public Integer getSizeRw() {
+ public Long getSizeRw() {
return sizeRw;
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java
index cc60a5bcc..99a9fc200 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java
@@ -26,6 +26,11 @@ public interface ListImagesCmd extends SyncDockerCmd> {
*/
ListImagesCmd withShowAll(Boolean showAll);
+ /**
+ * Filter images by name
+ * @deprecated use {@link #withFilter(String, Collection)}
+ */
+ @Deprecated
ListImagesCmd withImageNameFilter(String imageName);
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/UpdateContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/UpdateContainerCmd.java
index 82fbca5f8..d53bcdcdf 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/UpdateContainerCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/UpdateContainerCmd.java
@@ -1,9 +1,16 @@
package com.github.dockerjava.api.command;
+import com.github.dockerjava.api.model.BlkioRateDevice;
+import com.github.dockerjava.api.model.BlkioWeightDevice;
+import com.github.dockerjava.api.model.Device;
+import com.github.dockerjava.api.model.DeviceRequest;
+import com.github.dockerjava.api.model.RestartPolicy;
+import com.github.dockerjava.api.model.Ulimit;
import com.github.dockerjava.api.model.UpdateContainerResponse;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
+import java.util.List;
/**
* @author Kanstantsin Shautsou
@@ -13,22 +20,47 @@ public interface UpdateContainerCmd extends SyncDockerCmd getBlkioWeightDevice();
+
+ UpdateContainerCmd withBlkioWeightDevice(List blkioWeightDevice);
@CheckForNull
- Integer getCpuPeriod();
+ List getBlkioDeviceReadBps();
- UpdateContainerCmd withCpuPeriod(Integer cpuPeriod);
+ UpdateContainerCmd withBlkioDeviceReadBps(List blkioDeviceReadBps);
@CheckForNull
- Integer getCpuQuota();
+ List getBlkioDeviceWriteBps();
- UpdateContainerCmd withCpuQuota(Integer cpuQuota);
+ UpdateContainerCmd withBlkioDeviceWriteBps(List blkioDeviceWriteBps);
+
+ @CheckForNull
+ List getBlkioDeviceReadIOps();
+
+ UpdateContainerCmd withBlkioDeviceReadIOps(List blkioDeviceReadIOps);
+
+ @CheckForNull
+ List getBlkioDeviceWriteIOps();
+
+ UpdateContainerCmd withBlkioDeviceWriteIOps(List blkioDeviceWriteIOps);
+
+ @CheckForNull
+ Long getCpuPeriod();
+
+ UpdateContainerCmd withCpuPeriod(Long cpuPeriod);
+
+ @CheckForNull
+ Long getCpuQuota();
+
+ UpdateContainerCmd withCpuQuota(Long cpuQuota);
@CheckForNull
String getCpusetCpus();
@@ -45,6 +77,31 @@ public interface UpdateContainerCmd extends SyncDockerCmd getDevices();
+
+ UpdateContainerCmd withDevices(List devices);
+
+ @CheckForNull
+ List getDeviceCgroupRules();
+
+ UpdateContainerCmd withDeviceCgroupRules(List deviceCgroupRules);
+
+ @CheckForNull
+ List getDeviceRequests();
+
+ UpdateContainerCmd withDeviceRequests(List deviceRequests);
+
@CheckForNull
Long getKernelMemory();
@@ -65,6 +122,36 @@ public interface UpdateContainerCmd extends SyncDockerCmd getUlimits();
+
+ UpdateContainerCmd withUlimits(List ulimits);
+
+ @CheckForNull
+ RestartPolicy getRestartPolicy();
+
+ UpdateContainerCmd withRestartPolicy(RestartPolicy restartPolicy);
+
interface Exec extends DockerCmdSyncExec {
}
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/WaitContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/WaitContainerCmd.java
index 3117cf7e4..7b910cd69 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/WaitContainerCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/WaitContainerCmd.java
@@ -2,9 +2,11 @@
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import com.github.dockerjava.api.async.ResultCallback;
import com.github.dockerjava.api.exception.NotFoundException;
+import com.github.dockerjava.api.model.WaitContainerCondition;
import com.github.dockerjava.api.model.WaitResponse;
/**
@@ -20,8 +22,20 @@ public interface WaitContainerCmd extends AsyncDockerCmd> T exec(T resultCallback);
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Bind.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Bind.java
index a7c8dba26..ea7c22e69 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Bind.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Bind.java
@@ -118,10 +118,16 @@ public static Bind parse(String serialized) {
nocopy = true;
} else if (PropagationMode.SHARED.toString().equals(p)) {
propagationMode = PropagationMode.SHARED;
+ } else if (PropagationMode.RSHARED.toString().equals(p)) {
+ propagationMode = PropagationMode.RSHARED;
} else if (PropagationMode.SLAVE.toString().equals(p)) {
propagationMode = PropagationMode.SLAVE;
+ } else if (PropagationMode.RSLAVE.toString().equals(p)) {
+ propagationMode = PropagationMode.RSLAVE;
} else if (PropagationMode.PRIVATE.toString().equals(p)) {
propagationMode = PropagationMode.PRIVATE;
+ } else if (PropagationMode.RPRIVATE.toString().equals(p)) {
+ propagationMode = PropagationMode.RPRIVATE;
} else {
seMode = SELContext.fromString(p);
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Capability.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Capability.java
index fe71864c0..57fb97c7b 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Capability.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Capability.java
@@ -1,5 +1,7 @@
package com.github.dockerjava.api.model;
+import com.fasterxml.jackson.annotation.JsonCreator;
+
/**
* The Linux capabilities supported by Docker. The list of capabilities is defined in Docker's types.go, {@link #ALL} was added manually.
*
@@ -299,5 +301,11 @@ public enum Capability {
/**
* Trigger something that will wake up the system (set CLOCK_REALTIME_ALARM and CLOCK_BOOTTIME_ALARM timers).
*/
- WAKE_ALARM
+ WAKE_ALARM;
+
+ @JsonCreator
+ public static Capability fromValue(String cap) {
+ String result = !cap.startsWith("CAP_") ? cap : cap.split("_", 2)[1];
+ return Capability.valueOf(result);
+ }
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/HostConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/HostConfig.java
index 2ad622ca6..603bc6347 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/HostConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/HostConfig.java
@@ -73,6 +73,9 @@ public static HostConfig newHostConfig() {
@JsonProperty("NanoCpus")
private Long nanoCPUs;
+ @JsonProperty("Annotations")
+ private Map annotations;
+
@JsonProperty("CapAdd")
private Capability[] capAdd;
@@ -304,6 +307,11 @@ public Integer getBlkioWeight() {
return blkioWeight;
}
+ @CheckForNull
+ public Map getAnnotations() {
+ return annotations;
+ }
+
public Capability[] getCapAdd() {
return capAdd;
}
@@ -636,6 +644,11 @@ public HostConfig withBlkioWeightDevice(List blkioWeightDevic
return this;
}
+ public HostConfig withAnnotations(Map annotations) {
+ this.annotations = annotations;
+ return this;
+ }
+
/**
* @see #capAdd
*/
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ImageHistory.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ImageHistory.java
new file mode 100644
index 000000000..fb8f5d95c
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ImageHistory.java
@@ -0,0 +1,97 @@
+package com.github.dockerjava.api.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import javax.annotation.CheckForNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Represents an individual image layer information in response to the ImageHistory operation.
+ */
+@EqualsAndHashCode
+@ToString
+public class ImageHistory extends DockerObject implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @JsonProperty("Id")
+ private String id;
+
+ @JsonProperty("Created")
+ private Long created;
+
+ @JsonProperty("CreatedBy")
+ private String createdBy;
+
+ @JsonProperty("Tags")
+ private List tags;
+
+ @JsonProperty("Size")
+ private Long size;
+
+ @JsonProperty("Comment")
+ private String comment;
+
+ @CheckForNull
+ public String getId() {
+ return id;
+ }
+
+ public ImageHistory withId(String id) {
+ this.id = id;
+ return this;
+ }
+
+ @CheckForNull
+ public Long getCreated() {
+ return created;
+ }
+
+ public ImageHistory withCreated(Long created) {
+ this.created = created;
+ return this;
+ }
+
+ @CheckForNull
+ public String getCreatedBy() {
+ return createdBy;
+ }
+
+ public ImageHistory withCreatedBy(String createdBy) {
+ this.createdBy = createdBy;
+ return this;
+ }
+
+ @CheckForNull
+ public List getTags() {
+ return tags;
+ }
+
+ public ImageHistory withTags(List tags) {
+ this.tags = tags;
+ return this;
+ }
+
+ @CheckForNull
+ public Long getSize() {
+ return size;
+ }
+
+ public ImageHistory withSize(Long size) {
+ this.size = size;
+ return this;
+ }
+
+ @CheckForNull
+ public String getComment() {
+ return comment;
+ }
+
+ public ImageHistory withComment(String comment) {
+ this.comment = comment;
+ return this;
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ImageOptions.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ImageOptions.java
new file mode 100644
index 000000000..bc8b89acb
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ImageOptions.java
@@ -0,0 +1,27 @@
+package com.github.dockerjava.api.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+/**
+ * @since {@link RemoteApiVersion#VERSION_1_48}
+ */
+@EqualsAndHashCode
+@ToString
+public class ImageOptions extends DockerObject implements Serializable {
+ private static final long serialVersionUID = 1L;
+ @JsonProperty("Subpath")
+ private String subpath;
+
+ public String getSubpath() {
+ return subpath;
+ }
+
+ public ImageOptions withSubpath(String subpath) {
+ this.subpath = subpath;
+ return this;
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Info.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Info.java
index 75afefd2b..67348b86b 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Info.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Info.java
@@ -1108,14 +1108,33 @@ public Info withIsolation(String isolation) {
return this;
}
+ /**
+ * @see #securityOptions
+ */
public List getSecurityOptions() {
return securityOptions;
}
+ /**
+ * @see #securityOptions
+ */
+ public Info withSecurityOptions(List securityOptions) {
+ this.securityOptions = securityOptions;
+ return this;
+ }
+
/**
* @see #runtimes
*/
public Map getRuntimes() {
return runtimes;
}
+
+ /**
+ * @see #runtimes
+ */
+ public Info withRuntimes(Map runtimes) {
+ this.runtimes = runtimes;
+ return this;
+ }
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Mount.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Mount.java
index 9bfe9b16e..3f17343c3 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Mount.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Mount.java
@@ -57,6 +57,12 @@ public class Mount extends DockerObject implements Serializable {
@JsonProperty("TmpfsOptions")
private TmpfsOptions tmpfsOptions;
+ /**
+ * @since 1.48
+ */
+ @JsonProperty("ImageOptions")
+ private ImageOptions imageOptions;
+
/**
* @see #type
*/
@@ -177,4 +183,23 @@ public Mount withTmpfsOptions(TmpfsOptions tmpfsOptions) {
}
return this;
}
+
+ /**
+ * @see #imageOptions
+ */
+ @CheckForNull
+ public ImageOptions getImageOptions() {
+ return imageOptions;
+ }
+
+ /**
+ * @see #imageOptions
+ */
+ public Mount withImageOptions(ImageOptions imageOptions) {
+ this.imageOptions = imageOptions;
+ if (imageOptions != null) {
+ this.type = MountType.IMAGE;
+ }
+ return this;
+ }
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/MountType.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/MountType.java
index 219782a56..b522c9612 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/MountType.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/MountType.java
@@ -18,6 +18,10 @@ public enum MountType {
//@since 1.40
@JsonProperty("npipe")
- NPIPE
+ NPIPE,
+
+ //@since 1.48
+ @JsonProperty("image")
+ IMAGE,
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/WaitContainerCondition.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/WaitContainerCondition.java
new file mode 100644
index 000000000..8af0efa35
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/WaitContainerCondition.java
@@ -0,0 +1,26 @@
+package com.github.dockerjava.api.model;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Docker Engine API wait conditions (added in v1.30).
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ */
+public enum WaitContainerCondition {
+ NOT_RUNNING("not-running"),
+ NEXT_EXIT("next-exit"),
+ REMOVED("removed");
+
+ @Nonnull
+ private final String value;
+
+ WaitContainerCondition(@Nonnull String value) {
+ this.value = value;
+ }
+
+ @Nonnull
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/docker-java-core/pom.xml b/docker-java-core/pom.xml
index 290a1fed9..89c72c024 100644
--- a/docker-java-core/pom.xml
+++ b/docker-java-core/pom.xml
@@ -58,7 +58,7 @@
com.fasterxml.jackson.core
jackson-databind
- ${jackson.version}
+ 2.20.1
diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java b/docker-java-core/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java
index e04ab8e3e..9e1d71020 100644
--- a/docker-java-core/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java
+++ b/docker-java-core/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java
@@ -8,6 +8,7 @@
import com.github.dockerjava.api.command.CommitCmd;
import com.github.dockerjava.api.command.ConnectToNetworkCmd;
import com.github.dockerjava.api.command.ContainerDiffCmd;
+import com.github.dockerjava.api.command.ExportContainerCmd;
import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd;
import com.github.dockerjava.api.command.CopyArchiveToContainerCmd;
import com.github.dockerjava.api.command.CopyFileFromContainerCmd;
@@ -29,6 +30,7 @@
import com.github.dockerjava.api.command.InspectContainerCmd;
import com.github.dockerjava.api.command.InspectExecCmd;
import com.github.dockerjava.api.command.InspectImageCmd;
+import com.github.dockerjava.api.command.ImageHistoryCmd;
import com.github.dockerjava.api.command.InspectNetworkCmd;
import com.github.dockerjava.api.command.InspectServiceCmd;
import com.github.dockerjava.api.command.InspectSwarmCmd;
@@ -88,6 +90,7 @@
import com.github.dockerjava.core.exec.CommitCmdExec;
import com.github.dockerjava.core.exec.ConnectToNetworkCmdExec;
import com.github.dockerjava.core.exec.ContainerDiffCmdExec;
+import com.github.dockerjava.core.exec.ExportContainerCmdExec;
import com.github.dockerjava.core.exec.CopyArchiveFromContainerCmdExec;
import com.github.dockerjava.core.exec.CopyArchiveToContainerCmdExec;
import com.github.dockerjava.core.exec.CopyFileFromContainerCmdExec;
@@ -113,6 +116,7 @@
import com.github.dockerjava.core.exec.InspectContainerCmdExec;
import com.github.dockerjava.core.exec.InspectExecCmdExec;
import com.github.dockerjava.core.exec.InspectImageCmdExec;
+import com.github.dockerjava.core.exec.ImageHistoryCmdExec;
import com.github.dockerjava.core.exec.InspectNetworkCmdExec;
import com.github.dockerjava.core.exec.InspectServiceCmdExec;
import com.github.dockerjava.core.exec.InspectSwarmCmdExec;
@@ -281,6 +285,11 @@ public InspectImageCmd.Exec createInspectImageCmdExec() {
return new InspectImageCmdExec(getBaseResource(), getDockerClientConfig());
}
+ @Override
+ public ImageHistoryCmd.Exec createImageHistoryCmdExec() {
+ return new ImageHistoryCmdExec(getBaseResource(), getDockerClientConfig());
+ }
+
@Override
public ListContainersCmd.Exec createListContainersCmdExec() {
return new ListContainersCmdExec(getBaseResource(), getDockerClientConfig());
@@ -361,6 +370,11 @@ public ContainerDiffCmd.Exec createContainerDiffCmdExec() {
return new ContainerDiffCmdExec(getBaseResource(), getDockerClientConfig());
}
+ @Override
+ public ExportContainerCmd.Exec createExportContainerCmdExec() {
+ return new ExportContainerCmdExec(getBaseResource(), getDockerClientConfig());
+ }
+
@Override
public KillContainerCmd.Exec createKillContainerCmdExec() {
return new KillContainerCmdExec(getBaseResource(), getDockerClientConfig());
diff --git a/docker-java-core/src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java b/docker-java-core/src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java
index 8011a2a5e..dad75b360 100644
--- a/docker-java-core/src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java
+++ b/docker-java-core/src/main/java/com/github/dockerjava/core/DefaultDockerClientConfig.java
@@ -5,6 +5,8 @@
import com.github.dockerjava.api.model.AuthConfigurations;
import com.github.dockerjava.core.NameParser.HostnameReposName;
import com.github.dockerjava.core.NameParser.ReposTag;
+
+import java.util.Map.Entry;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;
@@ -128,9 +130,11 @@ private static Properties loadIncludedDockerProperties(Properties systemProperti
}
private static void replaceProperties(Properties properties, Properties replacements) {
- for (Object objectKey : properties.keySet()) {
- String key = objectKey.toString();
- properties.setProperty(key, replaceProperties(properties.getProperty(key), replacements));
+ for (Entry