diff --git a/.ci/get-docker-com.sh b/.ci/get-docker-com.sh
deleted file mode 100755
index d9c0142a2..000000000
--- a/.ci/get-docker-com.sh
+++ /dev/null
@@ -1,313 +0,0 @@
-#!/bin/sh
-set -e
-#
-# This script is meant for quick & easy install via:
-# 'curl -sSL https://get.docker.com/ | sh'
-# or:
-# 'wget -qO- https://get.docker.com/ | sh'
-#
-# For test builds (ie. release candidates):
-# 'curl -fsSL https://test.docker.com/ | sh'
-# or:
-# 'wget -qO- https://test.docker.com/ | sh'
-#
-# For experimental builds:
-# 'curl -fsSL https://experimental.docker.com/ | sh'
-# or:
-# 'wget -qO- https://experimental.docker.com/ | sh'
-#
-# Docker Maintainers:
-# To update this script on https://get.docker.com,
-# use hack/release.sh during a normal release,
-# or the following one-liner for script hotfixes:
-# aws s3 cp --acl public-read hack/install.sh s3://get.docker.com/index
-#
-
-url="https://get.docker.com/"
-apt_url="https://apt.dockerproject.org"
-yum_url="https://yum.dockerproject.org"
-gpg_fingerprint="58118E89F3A912897C070ADBF76221572C52609D"
-
-key_servers="
-ha.pool.sks-keyservers.net
-pgp.mit.edu
-keyserver.ubuntu.com
-"
-
-command_exists() {
- command -v "$@" > /dev/null 2>&1
-}
-
-semverParse() {
- major="${1%%.*}"
- minor="${1#$major.}"
- minor="${minor%%.*}"
- patch="${1#$major.$minor.}"
- patch="${patch%%[-.]*}"
-}
-
-do_install() {
- case "$(uname -m)" in
- *64)
- ;;
- *)
- cat >&2 <<-'EOF'
- Error: you are not using a 64bit platform.
- Docker currently only supports 64bit platforms.
- EOF
- exit 1
- ;;
- esac
-
- user="$(id -un 2>/dev/null || true)"
-
- sh_c='sh -c'
- if [ "$user" != 'root' ]; then
- if command_exists sudo; then
- sh_c='sudo -E sh -c'
- elif command_exists su; then
- sh_c='su -c'
- else
- cat >&2 <<-'EOF'
- Error: this installer needs the ability to run commands as root.
- We are unable to find either "sudo" or "su" available to make this happen.
- EOF
- exit 1
- fi
- fi
-
- curl=''
- if command_exists curl; then
- curl='curl -sSL'
- elif command_exists wget; then
- curl='wget -qO-'
- elif command_exists busybox && busybox --list-modules | grep -q wget; then
- curl='busybox wget -qO-'
- fi
-
- # check to see which repo they are trying to install from
- if [ -z "$repo" ]; then
- repo='main'
- if [ "https://test.docker.com/" = "$url" ]; then
- repo='testing'
- elif [ "https://experimental.docker.com/" = "$url" ]; then
- repo='experimental'
- fi
- fi
-
- # perform some very rudimentary platform detection
- lsb_dist=''
- dist_version=''
- if command_exists lsb_release; then
- lsb_dist="$(lsb_release -si)"
- fi
- if [ -z "$lsb_dist" ] && [ -r /etc/lsb-release ]; then
- lsb_dist="$(. /etc/lsb-release && echo "$DISTRIB_ID")"
- fi
- if [ -z "$lsb_dist" ] && [ -r /etc/debian_version ]; then
- lsb_dist='debian'
- fi
- if [ -z "$lsb_dist" ] && [ -r /etc/fedora-release ]; then
- lsb_dist='fedora'
- fi
- if [ -z "$lsb_dist" ] && [ -r /etc/oracle-release ]; then
- lsb_dist='oracleserver'
- fi
- if [ -z "$lsb_dist" ]; then
- if [ -r /etc/centos-release ] || [ -r /etc/redhat-release ]; then
- lsb_dist='centos'
- fi
- fi
- if [ -z "$lsb_dist" ] && [ -r /etc/os-release ]; then
- lsb_dist="$(. /etc/os-release && echo "$ID")"
- fi
-
- lsb_dist="$(echo "$lsb_dist" | tr '[:upper:]' '[:lower:]')"
-
- case "$lsb_dist" in
-
- ubuntu)
- if command_exists lsb_release; then
- dist_version="$(lsb_release --codename | cut -f2)"
- fi
- if [ -z "$dist_version" ] && [ -r /etc/lsb-release ]; then
- dist_version="$(. /etc/lsb-release && echo "$DISTRIB_CODENAME")"
- fi
- ;;
-
- debian)
- dist_version="$(cat /etc/debian_version | sed 's/\/.*//' | sed 's/\..*//')"
- case "$dist_version" in
- 8)
- dist_version="jessie"
- ;;
- 7)
- dist_version="wheezy"
- ;;
- esac
- ;;
-
- oracleserver)
- # need to switch lsb_dist to match yum repo URL
- lsb_dist="oraclelinux"
- dist_version="$(rpm -q --whatprovides redhat-release --queryformat "%{VERSION}\n" | sed 's/\/.*//' | sed 's/\..*//' | sed 's/Server*//')"
- ;;
-
- fedora|centos)
- dist_version="$(rpm -q --whatprovides redhat-release --queryformat "%{VERSION}\n" | sed 's/\/.*//' | sed 's/\..*//' | sed 's/Server*//')"
- ;;
-
- *)
- if command_exists lsb_release; then
- dist_version="$(lsb_release --codename | cut -f2)"
- fi
- if [ -z "$dist_version" ] && [ -r /etc/os-release ]; then
- dist_version="$(. /etc/os-release && echo "$VERSION_ID")"
- fi
- ;;
-
-
- esac
-
-
- # Run setup for each distro accordingly
- case "$lsb_dist" in
- ubuntu|debian)
- export DEBIAN_FRONTEND=noninteractive
-
- did_apt_get_update=
- apt_get_update() {
- if [ -z "$did_apt_get_update" ]; then
- ( set -x; $sh_c 'sleep 3; apt-get update' )
- did_apt_get_update=1
- fi
- }
-
- # aufs is preferred over devicemapper; try to ensure the driver is available.
- if ! grep -q aufs /proc/filesystems && ! $sh_c 'modprobe aufs'; then
- if uname -r | grep -q -- '-generic' && dpkg -l 'linux-image-*-generic' | grep -qE '^ii|^hi' 2>/dev/null; then
- kern_extras="linux-image-extra-$(uname -r) linux-image-extra-virtual"
-
- apt_get_update
- ( set -x; $sh_c 'sleep 3; apt-get install -y -q '"$kern_extras" ) || true
-
- if ! grep -q aufs /proc/filesystems && ! $sh_c 'modprobe aufs'; then
- echo >&2 'Warning: tried to install '"$kern_extras"' (for AUFS)'
- echo >&2 ' but we still have no AUFS. Docker may not work. Proceeding anyways!'
- ( set -x; sleep 10 )
- fi
- else
- echo >&2 'Warning: current kernel is not supported by the linux-image-extra-virtual'
- echo >&2 ' package. We have no AUFS support. Consider installing the packages'
- echo >&2 ' linux-image-virtual kernel and linux-image-extra-virtual for AUFS support.'
- ( set -x; sleep 10 )
- fi
- fi
-
- # install apparmor utils if they're missing and apparmor is enabled in the kernel
- # otherwise Docker will fail to start
- if [ "$(cat /sys/module/apparmor/parameters/enabled 2>/dev/null)" = 'Y' ]; then
- if command -v apparmor_parser >/dev/null 2>&1; then
- echo 'apparmor is enabled in the kernel and apparmor utils were already installed'
- else
- echo 'apparmor is enabled in the kernel, but apparmor_parser missing'
- apt_get_update
- ( set -x; $sh_c 'sleep 3; apt-get install -y -q apparmor' )
- fi
- fi
-
- if [ ! -e /usr/lib/apt/methods/https ]; then
- apt_get_update
- ( set -x; $sh_c 'sleep 3; apt-get install -y -q apt-transport-https ca-certificates' )
- fi
- if [ -z "$curl" ]; then
- apt_get_update
- ( set -x; $sh_c 'sleep 3; apt-get install -y -q curl ca-certificates' )
- curl='curl -sSL'
- fi
- (
- set -x
- for key_server in $key_servers ; do
- $sh_c "apt-key adv --keyserver hkp://${key_server}:80 --recv-keys ${gpg_fingerprint}" && break
- done
- $sh_c "apt-key adv -k ${gpg_fingerprint} >/dev/null"
- $sh_c "mkdir -p /etc/apt/sources.list.d"
- $sh_c "echo deb [arch=$(dpkg --print-architecture)] ${apt_url}/repo ${lsb_dist}-${dist_version} ${repo} > /etc/apt/sources.list.d/docker.list"
- $sh_c 'sleep 3; apt-get update'
- if [ -z "$DOCKER_VERSION" ]; then
- $sh_c 'apt-get -o Dpkg::Options::="--force-confnew" install -y -q docker-engine'
- else
- $sh_c "apt-get -o Dpkg::Options::=\"--force-confnew\" install -y -q docker-engine=$DOCKER_VERSION"
- fi
- )
- exit 0
- ;;
-
- fedora|centos|oraclelinux)
- $sh_c "cat >/etc/yum.repos.d/docker-${repo}.repo" <<-EOF
- [docker-${repo}-repo]
- name=Docker ${repo} Repository
- baseurl=${yum_url}/repo/${repo}/${lsb_dist}/${dist_version}
- enabled=1
- gpgcheck=1
- gpgkey=${yum_url}/gpg
- EOF
- if [ "$lsb_dist" = "fedora" ] && [ "$dist_version" -ge "22" ]; then
- (
- set -x
- $sh_c 'sleep 3; dnf -y -q install docker-engine'
- )
- else
- (
- set -x
- $sh_c 'sleep 3; yum -y -q install docker-engine'
- )
- fi
- exit 0
- ;;
- gentoo)
- if [ "$url" = "https://test.docker.com/" ]; then
- # intentionally mixed spaces and tabs here -- tabs are stripped by "<<-'EOF'", spaces are kept in the output
- cat >&2 <<-'EOF'
-
- You appear to be trying to install the latest nightly build in Gentoo.'
- The portage tree should contain the latest stable release of Docker, but'
- if you want something more recent, you can always use the live ebuild'
- provided in the "docker" overlay available via layman. For more'
- instructions, please see the following URL:'
-
- https://github.com/tianon/docker-overlay#using-this-overlay'
-
- After adding the "docker" overlay, you should be able to:'
-
- emerge -av =app-emulation/docker-9999'
-
- EOF
- exit 1
- fi
-
- (
- set -x
- $sh_c 'sleep 3; emerge app-emulation/docker'
- )
- exit 0
- ;;
- esac
-
- # intentionally mixed spaces and tabs here -- tabs are stripped by "<<-'EOF'", spaces are kept in the output
- cat >&2 <<-'EOF'
-
- Either your platform is not easily detectable, is not supported by this
- installer script (yet - PRs welcome! [hack/install.sh]), or does not yet have
- a package for Docker. Please visit the following URL for more detailed
- installation instructions:
-
- https://docs.docker.com/engine/installation/
-
- EOF
- exit 1
-}
-
-# wrapped up in a function so that we have some protection against only getting
-# half the file during "curl | sh"
-do_install
diff --git a/.ci/setup_docker.sh b/.ci/setup_docker.sh
deleted file mode 100755
index df9cf205a..000000000
--- a/.ci/setup_docker.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env bash
-
-set -exu
-
-DOCKER_VERSION="${DOCKER_VERSION:-}"
-DOCKER_HOST="${DOCKER_HOST:-}"
-
-if [[ -n $DOCKER_VERSION ]]; then
- sudo -E apt-get -q -y --purge remove docker-engine docker-ce
-
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- sudo apt-get update
- sudo apt-cache madison docker-ce
- sudo apt-get install "docker-ce=$DOCKER_VERSION"
-fi
-
-if [[ -n $DOCKER_HOST ]]; then
- sudo mkdir -p /etc/systemd/system/docker.service.d/
-
- echo "
-[Service]
-ExecStart=
-ExecStart=/usr/bin/dockerd -H $DOCKER_HOST -H unix:///var/run/docker.sock
- " | sudo tee -a /etc/systemd/system/docker.service.d/override.conf
-
- sudo systemctl daemon-reload
- sudo service docker restart || sudo journalctl -xe
- sudo service docker status
-fi
-
-while (! docker ps ); do
- echo "Waiting for Docker to launch..."
- sleep 1
-done
-docker version
-docker info
-
-docker run --rm hello-world
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 7dec19aef..d301147be 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -4,5 +4,6 @@ updates:
directory: "/"
schedule:
interval: weekly
+ day: tuesday
open-pull-requests-limit: 99
rebase-strategy: disabled
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4f1ef43de..5d6f8d370 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -3,34 +3,51 @@ name: CI
on:
pull_request: {}
push: { branches: [ main ] }
+ workflow_dispatch:
jobs:
build:
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
include:
- { name: "default", javaVersion: 8 }
- { name: "default", javaVersion: 17 }
- - { name: "over TCP", dockerHost: "tcp://127.0.0.1:2375", javaVersion: 8 }
- - { name: "Docker 19.03.9", dockerVersion: "5:19.03.9~3-0~ubuntu-focal", javaVersion: 8 }
-
+ - { name: "default", javaVersion: 21 }
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set up JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
java-version: ${{matrix.javaVersion}}
distribution: temurin
- name: Configure Docker
+ id: setup_docker
+ uses: docker/setup-docker-action@v4
+ with:
+ channel: stable
+ - name: Build with Maven
env:
- DOCKER_VERSION: ${{matrix.dockerVersion}}
- DOCKER_HOST: ${{matrix.dockerHost}}
- run: .ci/setup_docker.sh
+ DOCKER_HOST: ${{steps.setup_docker.outputs.sock}}
+ run: ./mvnw --no-transfer-progress verify
+
+ tcp:
+ runs-on: ubuntu-24.04
+ steps:
+ - uses: actions/checkout@v4
+ - name: Set up JDK
+ uses: actions/setup-java@v4
+ with:
+ java-version: 8
+ distribution: temurin
+ - name: Configure Docker
+ id: setup_docker
+ uses: docker/setup-docker-action@v4
+ with:
+ channel: stable
+ tcp-port: 2375
- name: Build with Maven
env:
- DOCKER_HOST: ${{matrix.dockerHost}}
- run: |
- [[ -z "$DOCKER_HOST" ]] && unset DOCKER_HOST
- ./mvnw --no-transfer-progress verify
+ DOCKER_HOST: ${{steps.setup_docker.outputs.tcp}}
+ run: ./mvnw --no-transfer-progress verify
diff --git a/.github/workflows/main.yml b/.github/workflows/release-drafter.yml
similarity index 100%
rename from .github/workflows/main.yml
rename to .github/workflows/release-drafter.yml
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 7ee128801..3e9f64348 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -8,18 +8,23 @@ on:
jobs:
build:
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set up JDK 8
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
java-version: 8
distribution: temurin
+ server-id: default
+ server-username: MAVEN_USERNAME
+ server-password: MAVEN_CENTRAL_TOKEN
- 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
diff --git a/docker-java-api/pom.xml b/docker-java-api/pom.xml
index da19bba47..d801546c0 100644
--- a/docker-java-api/pom.xml
+++ b/docker-java-api/pom.xml
@@ -42,7 +42,7 @@
org.projectlombok
lombok
- 1.18.22
+ 1.18.38
provided
@@ -50,14 +50,14 @@
org.junit.jupiter
junit-jupiter
- 5.10.0
+ 5.12.2
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/command/BuildImageResultCallback.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageResultCallback.java
index 331f69509..9db21a6c4 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageResultCallback.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageResultCallback.java
@@ -67,14 +67,14 @@ public String awaitImageId(long timeout, TimeUnit timeUnit) {
}
private String getImageId() {
- if (imageId != null) {
- return imageId;
+ if (error != null) {
+ throw new DockerClientException("Could not build image: " + error);
}
- if (error == null) {
- throw new DockerClientException("Could not build image");
+ if (imageId != null) {
+ return imageId;
}
- throw new DockerClientException("Could not build image: " + error);
+ throw new DockerClientException("Could not build image");
}
}
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/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/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/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 0752778e3..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
@@ -97,6 +97,12 @@ public class Info extends DockerObject implements Serializable {
@JsonProperty("LoggingDriver")
private String loggingDriver;
+ @JsonProperty("CgroupDriver")
+ private String cGroupDriver;
+
+ @JsonProperty("CgroupVersion")
+ private String cGroupVersion;
+
/**
* @since {@link com.github.dockerjava.core.RemoteApiVersion#VERSION_1_20}
*/
@@ -235,6 +241,9 @@ public class Info extends DockerObject implements Serializable {
@JsonProperty("SecurityOptions")
private List securityOptions;
+ @JsonProperty("Runtimes")
+ private Map runtimes;
+
/**
* @see #architecture
*/
@@ -483,6 +492,22 @@ public String getLoggingDriver() {
return loggingDriver;
}
+ /**
+ * @see #cGroupDriver
+ */
+ @CheckForNull
+ public String getCGroupDriver() {
+ return cGroupDriver;
+ }
+
+ /**
+ * @see #cGroupVersion
+ */
+ @CheckForNull
+ public String getCGroupVersion() {
+ return cGroupVersion;
+ }
+
/**
* @see #loggingDriver
*/
@@ -491,6 +516,22 @@ public Info withLoggingDriver(String loggingDriver) {
return this;
}
+ /**
+ * @see #cGroupDriver
+ */
+ public Info withCGroupDriver(String cGroupDriver) {
+ this.cGroupDriver = cGroupDriver;
+ return this;
+ }
+
+ /**
+ * @see #cGroupVersion
+ */
+ public Info withCGroupVersion(String cGroupVersion) {
+ this.cGroupVersion = cGroupVersion;
+ return this;
+ }
+
/**
* @see #experimentalBuild
*/
@@ -1067,7 +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/Network.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Network.java
index 7e5110ce6..7e9d3b2fd 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Network.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Network.java
@@ -7,6 +7,7 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -18,6 +19,9 @@ public class Network extends DockerObject implements Serializable {
@JsonProperty("Id")
private String id;
+ @JsonProperty("Created")
+ private Date created;
+
@JsonProperty("Name")
private String name;
@@ -52,6 +56,10 @@ public String getId() {
return id;
}
+ public Date getCreated() {
+ return created;
+ }
+
public String getName() {
return name;
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java
index 66a559934..1d3f33c8e 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PullResponseItem.java
@@ -19,6 +19,8 @@ public class PullResponseItem extends ResponseItem {
private static final String DOWNLOADED_SWARM = ": downloaded";
+ private static final String ALREADY_EXISTS = "Already exists";
+
/**
* Returns whether the status indicates a successful pull operation
*
@@ -34,7 +36,8 @@ public boolean isPullSuccessIndicated() {
getStatus().contains(IMAGE_UP_TO_DATE) ||
getStatus().contains(DOWNLOADED_NEWER_IMAGE) ||
getStatus().contains(LEGACY_REGISTRY) ||
- getStatus().contains(DOWNLOADED_SWARM)
+ getStatus().contains(DOWNLOADED_SWARM) ||
+ getStatus().contains(ALREADY_EXISTS)
);
}
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/RuntimeInfo.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/RuntimeInfo.java
new file mode 100644
index 000000000..c64511cda
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/RuntimeInfo.java
@@ -0,0 +1,23 @@
+package com.github.dockerjava.api.model;
+
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+@EqualsAndHashCode
+@ToString
+public class RuntimeInfo extends DockerObject implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private String path;
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+}
diff --git a/docker-java-core/pom.xml b/docker-java-core/pom.xml
index b8369fa37..290a1fed9 100644
--- a/docker-java-core/pom.xml
+++ b/docker-java-core/pom.xml
@@ -99,6 +99,7 @@
8
8
+ true
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