-
-
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index 9e5f39465..000000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 000000000..8dea6c227
--- /dev/null
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,3 @@
+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/.travis.yml b/.travis.yml
deleted file mode 100644
index 35ce5e286..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-sudo: required
-dist: trusty
-language: java
-
-services:
- - docker
-
-jdk:
- - oraclejdk8
-
-install: true
-
-env:
- global:
- - CODECOV=true
- - DOCKER_TLS_VERIFY=""
- # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
- # via the "travis encrypt" command using the project repo's public key
- - secure: "GonzmzvnXsTNQV+6sKtBSSPiwbpMZjxumNt5LFp1g77/afLxw9kl2EQOXbUe308vFOwRVqeY7drBvNJa8aJkTUClfMaGRjfZ9DUwm6doMKMUYrdEkYoQTcH7yDX5K5w9MT6m+Izj+BK2gB7nK3yFlYG6COeXCdFbQ4/cf3/xfRc="
- - COVERITY_SCAN_PROJECT_NAME="docker-java/docker-java"
- - COVERITY_SCAN_BRANCH_PATTERN="master"
- - COVERITY_SCAN_NOTIFICATION_EMAIL="kanstantsin.sha@gmail.com"
-
- matrix:
-# - repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="17.09.0~ce-0~ubuntu-trusty"
-# - repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="17.09.0~ce-0~ubuntu-trusty"
-# - repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="17.06.2~ce-0~ubuntu-trusty" DEPLOY=true COVERITY=true
- - repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="17.05.0~ce-0~ubuntu-trusty" DEPLOY=true COVERITY=true
- - repo="main" DOCKER_HOST="tcp://127.0.0.1:2377" DOCKER_VERSION="17.05.0~ce-0~ubuntu-trusty" SWARM_VERSION="1.2.8"
- - repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="17.05.0~ce-0~ubuntu-trusty"
- - repo="main" DOCKER_HOST="tcp://127.0.0.1:2377" DOCKER_VERSION="1.13.1-0~ubuntu-trusty" SWARM_VERSION="1.2.8"
- - repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.13.1-0~ubuntu-trusty"
- - repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.13.1-0~ubuntu-trusty"
- - repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.12.6-0~ubuntu-trusty"
- - repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.12.6-0~ubuntu-trusty"
-# - repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.11.2-0~trusty"
-# - repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.11.2-0~trusty"
-# - repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.10.3-0~trusty"
-# - repo="main" DOCKER_HOST="unix:///var/run/docker.sock" DOCKER_VERSION="1.10.3-0~trusty"
-# - repo="testing" DOCKER_HOST="tcp://127.0.0.1:2375"
-# - repo="testing" DOCKER_HOST="unix:///var/run/docker.sock"
-# - repo="experimental" DOCKER_HOST="tcp://127.0.0.1:2375"
-# - repo="experimental" DOCKER_HOST="unix:///var/run/docker.sock"
-
-cache:
- directories:
- - $HOME/.travis_cache
- - /tmp/coverity-cache
- - $HOME/.m2 # install will pollute it
-
-before_install:
- - pip install --user codecov
- - ./.travis/travis-before-install.sh
-
-script:
- - ./.travis/travis-script.sh
-
-after_success:
- - ./.travis/travis-after-success.sh
-
-#after_script:
-# - sudo cat /var/log/upstart/docker.log
diff --git a/.travis/get-docker-com.sh b/.travis/get-docker-com.sh
deleted file mode 100755
index d9c0142a2..000000000
--- a/.travis/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/.travis/travis-after-success.sh b/.travis/travis-after-success.sh
deleted file mode 100755
index 695358122..000000000
--- a/.travis/travis-after-success.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env bash
-
-if [[ $CODECOV == "true" ]]; then
- codecov
-fi
-
-if [[ $TRAVIS_BRANCH == "master" ]] && [[ $TRAVIS_PULL_REQUEST == "false" ]] && [[ $DEPLOY == "true" ]];
-then
- cat <> ~/settings.xml
-
-
-
- ossrh
- \${env.OSSRH_USER}
- \${env.OSSRH_PASS}
-
-
-
-EOF
- mvn deploy -DskipITs --settings ~/settings.xml
- fi
diff --git a/.travis/travis-before-install.sh b/.travis/travis-before-install.sh
deleted file mode 100755
index 88a1e0ecd..000000000
--- a/.travis/travis-before-install.sh
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/usr/bin/env bash
-
-SWARM_VERSION="${SWARM_VERSION:-}"
-FAST_BUILD="${FAST_BUILD:-}"
-
-## fix coverity issue
-sudo apt-get install -y -q ca-certificates
-echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt
-##
-
-if [ "$FAST_BUILD" == "true" ]; then
- echo "Fast build, skipping docker installations."
- exit 0
-fi
-
-set -exu
-
-sudo ip a ls
-sudo ip r ls
-sudo ss -antpl
-
-export HOST_PORT="2375"
-export SWARM_PORT="2377"
-export HOST_IP="$(ip a show dev eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)"
-# because of swarm use docker-engine directly
-export PRE_DOCKER_HOST="$DOCKER_HOST"
-export DOCKER_HOST="tcp://127.0.0.1:${HOST_PORT}"
-
-
-docker info
-docker version
-
-sudo -E apt-get update
-sudo -E apt-get install -q -y wget
-sudo -E apt-get -q -y --purge remove docker-engine
-sudo -E apt-cache policy docker-engine
-
-./.travis/get-docker-com.sh
-
-sudo -E stop docker
-
-#mkdir "${HOME}/.cache" || :
-#pushd "${HOME}/.cache"
-# wget -N "https://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_${DOCKER_VERSION}_amd64.deb"
-# sudo apt-get -f install
-# sudo dpkg -i "$(ls *${DOCKER_VERSION}*)"
-#popd
-rm -f "docker-java/src/test/resources/logback.xml"
-#rm -f "src/test/resources/travis-logback.xml"
-mv "docker-java/src/test/resources/travis-logback.xml" "docker-java/src/test/resources/logback-test.xml"
-
-# https://github.com/docker/docker/issues/18113
-sudo rm /var/lib/docker/network/files/local-kv.db
-
-sudo cat /etc/default/docker
-
-cat << EOF | sudo tee /etc/default/docker
-DOCKER_OPTS="\
---dns 8.8.8.8 \
---dns 8.8.4.4 \
--D \
--H=unix:///var/run/docker.sock \
--H=tcp://0.0.0.0:${HOST_PORT} \
---label=com.github.dockerjava.test=docker-java \
-"
-EOF
-
-sudo cat /etc/default/docker
-sudo bash -c ':> /var/log/upstart/docker.log'
-
-date
-sudo -E start docker
-
-tries=20
-sleep=5
-for i in $(seq 1 $tries); do
- if sudo grep "API listen on" /var/log/upstart/docker.log ; then
- echo "Docker started. Delay $(($i * $sleep))"
- break
- elif [[ $i -ge $tries ]]; then
- echo "Docker didn't start. Exiting!"
- sudo cat /var/log/upstart/docker.log
- exit 1
- else
- echo "Docker didn't start, sleeping for 5 secs..."
- sleep $sleep
- fi
-done
-
-
-sudo ss -antpl
-
-curl -V
-
-docker version || sudo cat /var/log/upstart/docker.log
-docker info
-
-set +u
-
-cat < "${HOME}/.docker-java.properties"
-registry.username=${registry_username}
-registry.password=${registry_password}
-registry.email=${registry_email}
-registry.url=https://index.docker.io/v1/
-
-EOF
-
-if [[ -n $SWARM_VERSION ]]; then
-# export SWARM_PORT="${PRE_DOCKER_HOST##*:}"
-
- docker pull swarm
-
-# # kv store https://docs.docker.com/v1.11/engine/userguide/networking/get-started-overlay/
-# docker run -d \
-# -p "8500:8500" \
-# -h "consul" \
-# --name=consul \
-# progrium/consul -server -bootstrap
-#
-# sleep 5
-
-# SWARM_TOKEN=$(docker run swarm c)
-
-# docker run \
-# -d \
-# --name=swarm_manager \
-# -p ${SWARM_PORT}:2375 \
-# "swarm:${SWARM_VERSION}" \
-# manage token://${SWARM_TOKEN}
-
- docker run \
- -d \
- -p ${SWARM_PORT}:2375 \
- --name=swarm_manager \
- swarm manage --engine-refresh-min-interval "3s" --engine-refresh-max-interval "6s" "nodes://${HOST_IP}:${HOST_PORT}"
-# swarm manage --engine-refresh-min-interval "3s" --engine-refresh-max-interval "6s" "consul://${HOST_IP}:8500"
-
- # join engine to swarm
- docker run \
- -d \
- "--name=swarm_join" \
- "swarm:${SWARM_VERSION}" \
- join --advertise="${HOST_IP}:${HOST_PORT}" --delay="0s" --heartbeat "5s" "nodes://${HOST_IP}:${HOST_PORT}"
-# join --advertise="${HOST_IP}:${HOST_PORT}" --delay="0s" --heartbeat "5s" "token://${SWARM_TOKEN}"
-
- docker run --rm \
- "swarm:${SWARM_VERSION}" list "nodes://${HOST_IP}:${HOST_PORT}"
-
- docker ps -a
- sudo ss -antpl
-
- sleep 30
-
- docker logs swarm_join
- docker logs swarm_manager
-# docker logs consul
-
- # switch to swarm connection
- DOCKER_HOST="$PRE_DOCKER_HOST"
-
- docker version
- docker info
-
- NODES=$(docker info | grep "Nodes:" | awk '{ print $2 }')
- if [[ $NODES -eq "0" ]]; then
- echo "Swarm didn't connect"
- exit 1
- fi
-
- # test via swarm
- docker pull busybox
-fi
diff --git a/.travis/travis-script.sh b/.travis/travis-script.sh
deleted file mode 100755
index 1cdc84fa5..000000000
--- a/.travis/travis-script.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env bash
-
-
-
-IS_COVERITY_SCAN_BRANCH=`ruby -e "puts '${TRAVIS_BRANCH}' =~ /\\A$COVERITY_SCAN_BRANCH_PATTERN\\z/ ? 1 : 0"`
-
-export COVERITY_ALLOWED=true
-# Verify upload is permitted
-AUTH_RES=`curl -s --form project="$COVERITY_SCAN_PROJECT_NAME" --form token="$COVERITY_SCAN_TOKEN" $SCAN_URL/api/upload_permitted`
-if [ "$AUTH_RES" = "Access denied" ]; then
- echo -e "\033[33;1mCoverity Scan API access denied. Check COVERITY_SCAN_PROJECT_NAME and COVERITY_SCAN_TOKEN.\033[0m"
- COVERITY_ALLOWED=false
-else
- AUTH=`echo $AUTH_RES | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['upload_permitted']"`
- if [ "$AUTH" = "true" ]; then
- echo -e "\033[33;1mCoverity Scan analysis authorized per quota.\033[0m"
- else
- WHEN=`echo $AUTH_RES | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['next_upload_permitted_at']"`
- echo -e "\033[33;1mCoverity Scan analysis NOT authorized until $WHEN.\033[0m"
-
- COVERITY_ALLOWED=false
- fi
-fi
-
-set -ex
-
-if [ "${FAST_BUILD}" == "true" ]; then
- if [ "$TRAVIS_PULL_REQUEST" == "false" ] &&
- [ "$COVERITY" == "true" ] &&
- [ "$IS_COVERITY_SCAN_BRANCH" = "1" ] &&
- [ "$COVERITY_ALLOWED" == "true" ]; then
- export COVERITY_SCAN_BUILD_COMMAND="mvn package"
- #curl -s "https://scan.coverity.com/scripts/travisci_build_coverity_scan.sh" | bash
- ./.travis/travisci_build_coverity_scan.sh
- else
- mvn package
- fi
-else
- if [ "$TRAVIS_PULL_REQUEST" == "false" ] &&
- [ "$COVERITY" == "true" ] &&
- [ "$IS_COVERITY_SCAN_BRANCH" = "1" ] &&
- [ "$COVERITY_ALLOWED" == "true" ]; then
- export COVERITY_SCAN_BUILD_COMMAND="mvn verify"
- #curl -s "https://scan.coverity.com/scripts/travisci_build_coverity_scan.sh" | bash
- ./.travis/travisci_build_coverity_scan.sh
- else
- mvn verify
- fi
-fi
diff --git a/.travis/travisci_build_coverity_scan.sh b/.travis/travisci_build_coverity_scan.sh
deleted file mode 100755
index 074d0a46f..000000000
--- a/.travis/travisci_build_coverity_scan.sh
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/bin/bash
-
-set -e
-
-# Environment check
-echo -e "\033[33;1mNote: COVERITY_SCAN_PROJECT_NAME and COVERITY_SCAN_TOKEN are available on Project Settings page on scan.coverity.com\033[0m"
-[ -z "$COVERITY_SCAN_PROJECT_NAME" ] && echo "ERROR: COVERITY_SCAN_PROJECT_NAME must be set" && exit 1
-[ -z "$COVERITY_SCAN_NOTIFICATION_EMAIL" ] && echo "ERROR: COVERITY_SCAN_NOTIFICATION_EMAIL must be set" && exit 1
-[ -z "$COVERITY_SCAN_BRANCH_PATTERN" ] && echo "ERROR: COVERITY_SCAN_BRANCH_PATTERN must be set" && exit 1
-[ -z "$COVERITY_SCAN_BUILD_COMMAND" ] && echo "ERROR: COVERITY_SCAN_BUILD_COMMAND must be set" && exit 1
-[ -z "$COVERITY_SCAN_TOKEN" ] && echo "ERROR: COVERITY_SCAN_TOKEN must be set" && exit 1
-
-PLATFORM=`uname`
-TOOL_ARCHIVE=/tmp/coverity-cache/cov-analysis-${PLATFORM}.tgz
-TOOL_URL=https://scan.coverity.com/download/${PLATFORM}
-TOOL_BASE=/tmp/coverity-scan-analysis
-UPLOAD_URL="https://scan.coverity.com/builds"
-SCAN_URL="https://scan.coverity.com"
-
-# Do not run on pull requests
-if [ "${TRAVIS_PULL_REQUEST}" = "true" ]; then
- echo -e "\033[33;1mINFO: Skipping Coverity Analysis: branch is a pull request.\033[0m"
- exit 0
-fi
-
-# Verify this branch should run
-IS_COVERITY_SCAN_BRANCH=`ruby -e "puts '${TRAVIS_BRANCH}' =~ /\\A$COVERITY_SCAN_BRANCH_PATTERN\\z/ ? 1 : 0"`
-if [ "$IS_COVERITY_SCAN_BRANCH" = "1" ]; then
- echo -e "\033[33;1mCoverity Scan configured to run on branch ${TRAVIS_BRANCH}\033[0m"
-else
- echo -e "\033[33;1mCoverity Scan NOT configured to run on branch ${TRAVIS_BRANCH}\033[0m"
- exit 1
-fi
-
-# Verify upload is permitted
-AUTH_RES=`curl -s --form project="$COVERITY_SCAN_PROJECT_NAME" --form token="$COVERITY_SCAN_TOKEN" $SCAN_URL/api/upload_permitted`
-if [ "$AUTH_RES" = "Access denied" ]; then
- echo -e "\033[33;1mCoverity Scan API access denied. Check COVERITY_SCAN_PROJECT_NAME and COVERITY_SCAN_TOKEN.\033[0m"
- exit 1
-else
- AUTH=`echo $AUTH_RES | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['upload_permitted']"`
- if [ "$AUTH" = "true" ]; then
- echo -e "\033[33;1mCoverity Scan analysis authorized per quota.\033[0m"
- else
- WHEN=`echo $AUTH_RES | ruby -e "require 'rubygems'; require 'json'; puts JSON[STDIN.read]['next_upload_permitted_at']"`
- echo -e "\033[33;1mCoverity Scan analysis NOT authorized until $WHEN.\033[0m"
-
- exit 1
- fi
-fi
-
-mkdir -p /tmp/coverity-cache || :
-
-if [ ! -d $TOOL_BASE ]; then
-
- # verify that binary is right
- if file $TOOL_ARCHIVE | grep HTML ; then
- echo "Removing $TOOL_ARCHIVE"
- rm -f $TOOL_ARCHIVE
- fi
-
- # Download Coverity Scan Analysis Tool
- if [ ! -e $TOOL_ARCHIVE ]; then
- echo -e "\033[33;1mDownloading Coverity Scan Analysis Tool...\033[0m"
- wget -nv -N -O $TOOL_ARCHIVE $TOOL_URL --post-data "project=$COVERITY_SCAN_PROJECT_NAME&token=$COVERITY_SCAN_TOKEN"
- fi
-
- # Extract Coverity Scan Analysis Tool
- echo -e "\033[33;1mExtracting Coverity Scan Analysis Tool...\033[0m"
- mkdir -p $TOOL_BASE
- pushd $TOOL_BASE
- du -sh $TOOL_ARCHIVE
- file $TOOL_ARCHIVE
- file $TOOL_ARCHIVE | grep HTML && cat $TOOL_ARCHIVE || :
- ls -la $TOOL_ARCHIVE
- tar -xf $TOOL_ARCHIVE #|& grep -v "Ignoring unknown extended header keyword"
- popd
-fi
-
-TOOL_DIR=`find $TOOL_BASE -type d -name 'cov-analysis*'`
-export PATH=$TOOL_DIR/bin:$PATH
-
-# Build
-echo -e "\033[33;1mRunning Coverity Scan Analysis Tool...\033[0m"
-COV_BUILD_OPTIONS=""
-#COV_BUILD_OPTIONS="--return-emit-failures 8 --parse-error-threshold 85"
-RESULTS_DIR="cov-int"
-eval "${COVERITY_SCAN_BUILD_COMMAND_PREPEND}"
-COVERITY_UNSUPPORTED=1 cov-build --dir $RESULTS_DIR $COV_BUILD_OPTIONS $COVERITY_SCAN_BUILD_COMMAND
-cov-import-scm --dir $RESULTS_DIR --scm git --log $RESULTS_DIR/scm_log.txt 2>&1
-
-# Upload results
-echo -e "\033[33;1mTarring Coverity Scan Analysis results...\033[0m"
-RESULTS_ARCHIVE=analysis-results.tgz
-tar czf $RESULTS_ARCHIVE $RESULTS_DIR
-SHA=`git rev-parse --short HEAD`
-
-echo -e "\033[33;1mUploading Coverity Scan Analysis results...\033[0m"
-response=$(curl \
- --silent --write-out "\n%{http_code}\n" \
- --form project=$COVERITY_SCAN_PROJECT_NAME \
- --form token=$COVERITY_SCAN_TOKEN \
- --form email=$COVERITY_SCAN_NOTIFICATION_EMAIL \
- --form file=@$RESULTS_ARCHIVE \
- --form version=$SHA \
- --form description="Travis CI build" \
- $UPLOAD_URL)
-status_code=$(echo "$response" | sed -n '$p')
-if [ "$status_code" != "201" ]; then
- TEXT=$(echo "$response" | sed '$d')
- echo -e "\033[33;1mCoverity Scan upload failed: $TEXT.\033[0m"
- exit 1
-fi
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 96a1b9d6e..5d344d93b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,13 @@ Change Log
===
+## 3.2.0
+- **Changelog is not maintained in this file. Please follow git diff or github releases.**
+- Library was split into multiple modules to get ability to choose transports.
+Okhttp was added (say thanks to @bsideup).
+- Various cleanup, tests de-duplication internally. Planned binary compatibility breakage was reverted by @testcontainers project, so migration should work smoothly. Please switch to non-deprecated methods.
+- Appeared various new commands and Fields(command options for existing commands).
+
## 3.1.2
- update unix-socket to 2.2.0
- Remove `JacksonJaxbJsonProvider` from `FiltersEncoder`
@@ -294,7 +301,7 @@ v2.0.0
Release notes
* Some commands APIs has been changed to be callback-driven now to simplify the processing of the result streams for the client application. This affects namely the events, stats, log, attach, build, push and pull commands. Look at the Wiki how to [process events](https://github.com/docker-java/docker-java/wiki#handle-events) or how to [build an image](https://github.com/docker-java/docker-java/wiki#build-image-from-dockerfile) from dockerfile for example.
-* The `DockerClientConfig` API has changed to free it from implementation specific configuration options like `readTimeout`, `maxTotalConnections`, `maxPerRouteConnections` and `enableLoggingFilter`. Most options can be configured via `DockerCmdExecFactoryImpl` [programmatically](https://github.com/docker-java/docker-java/wiki#intialize-docker-client-advanced) now. Logging is configurable via [logback](https://github.com/docker-java/docker-java/blob/master/src/test/resources/logback.xml) configuration file in the classpath.
+* The `DockerClientConfig` API has changed to free it from implementation specific configuration options like `readTimeout`, `maxTotalConnections`, `maxPerRouteConnections` and `enableLoggingFilter`. Most options can be configured via `DockerCmdExecFactoryImpl` [programmatically](https://github.com/docker-java/docker-java/wiki#intialize-docker-client-advanced) now. Logging is configurable via [logback](https://github.com/docker-java/docker-java/blob/main/src/test/resources/logback.xml) configuration file in the classpath.
All changes
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..5072b0864
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,58 @@
+# Build with Maven
+
+#### Prerequisites:
+
+* Java min 1.8
+* Maven 3
+
+Build and run integration tests as follows:
+
+ $ mvn clean install
+
+If you do not have access to a Docker server or just want to execute the build quickly, you can run the build without the integration tests:
+
+ $ mvn clean install -DskipITs
+
+By default the docker engine is using local UNIX sockets for communication with the docker CLI so docker-java
+client also uses UNIX domain sockets to connect to the docker daemon by default. To make the docker daemon listening on a TCP (http/https) port you have to configure it by setting the DOCKER_OPTS environment variable to something like the following:
+
+ DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock"
+
+More details about setting up Docker Engine can be found in the official documentation: https://docs.docker.com/engine/admin/
+
+To force docker-java to use TCP (http) configure the following (see [Configuration](https://github.com/docker-java/docker-java#configuration) for details):
+
+ DOCKER_HOST=tcp://127.0.0.1:2375
+
+For secure tls (https) communication:
+
+ DOCKER_HOST=tcp://127.0.0.1:2376
+ DOCKER_TLS_VERIFY=1
+ DOCKER_CERT_PATH=/Users/marcus/.docker/machine/machines/docker-1.11.2
+
+
+# Code Design
+ * Model is based on Objects and not primitives that allows nullify requests and have null values for data
+ that wasn't provided by docker daemon.
+ * For null safeness findbugs annotations are used.
+ ** Every method that may return `null` (and we are unsure in any fields as docker daemon may change something)
+ should be annotated with `@CheckForNull` return qualifier from `javax.annotation` package.
+ ** Methods that can't return `null` must be annotated with `@Nonnull`.
+ ** The same for Arguments.
+ ** `@Nullable` must be used only for changing inherited (other typed) qualifier.
+ * Setters in builder style must be prefixed with `withXX`.
+ * All classes should provide `toString()` `equals()` and `hashCode()` defined methods.
+ * Javadocs
+ ** Provide full information on field:
+ *** For models define API version with `@since {@link RemoteApiVersion#VERSION_1_X}`.
+ ** getters/setters should refernce to field `@see #$field`.
+ * If it is `Serializable` it shall have a `serialVersionUID` field. Unless code has shipped to users, the initial value of the `serialVersionUID` field shall be `1L`.
+
+# Coding style
+ * Some initial styling already enforced with checkstyle. Please aim for consistency with the existing code.
+
+# Testing
+ * Unit tests for serder (serialization-deserialization).
+ * Integration tests for commands.
+ * If model object has builders, then fill it with data and compare by `equals()` with expected response
+ from docker daemon. If failed, then some fields mappings are wrong.
\ No newline at end of file
diff --git a/README.md b/README.md
index de96156a5..b1fa9c89e 100644
--- a/README.md
+++ b/README.md
@@ -1,142 +1,9 @@
[](https://gitter.im/docker-java/docker-java?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](https://mvnrepository.com/artifact/com.github.docker-java/docker-java)
-[](https://bintray.com/kostyasha/maven/com.github.docker-java%3Adocker-java/_latestVersion)
-[](https://www.versioneye.com/java/com.github.docker-java:docker-java/references)
-[](https://travis-ci.org/docker-java/docker-java)
-[](https://scan.coverity.com/projects/9177)
-[](http://codecov.io/github/docker-java/docker-java?branch=master)
-[](https://github.com/docker-java/docker-java/blob/master/LICENSE)
-
-
+[](http://codecov.io/github/docker-java/docker-java?branch=master)
+[](https://github.com/docker-java/docker-java/blob/main/LICENSE)
# docker-java
Java API client for [Docker](http://docs.docker.io/ "Docker")
-The current implementation is based on Jersey 2.x and therefore classpath incompatible with older Jersey 1.x dependent libraries!
-
-Developer forum for [docker-java](https://groups.google.com/forum/?#!forum/docker-java-dev "docker-java")
-
-[Changelog](https://github.com/docker-java/docker-java/blob/master/CHANGELOG.md)
-[Wiki](https://github.com/docker-java/docker-java/wiki)
-
-## Build with Maven
-
-###### Prerequisites:
-
-* Java min 1.7
-* Maven 3
-
-Build and run integration tests as follows:
-
- $ mvn clean install
-
-If you do not have access to a Docker server or just want to execute the build quickly, you can run the build without the integration tests:
-
- $ mvn clean install -DskipITs
-
-By default the docker engine is using local UNIX sockets for communication with the docker CLI so docker-java
-client also uses UNIX domain sockets to connect to the docker daemon by default. To make the docker daemon listening on a TCP (http/https) port you have to configure it by setting the DOCKER_OPTS environment variable to something like the following:
-
- DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock"
-
-More details about setting up Docker Engine can be found in the official documentation: https://docs.docker.com/engine/admin/
-
-To force docker-java to use TCP (http) configure the following (see [Configuration](https://github.com/docker-java/docker-java#configuration) for details):
-
- DOCKER_HOST=tcp://127.0.0.1:2375
-
-For secure tls (https) communication:
-
- DOCKER_HOST=tcp://127.0.0.1:2376
- DOCKER_TLS_VERIFY=1
- DOCKER_CERT_PATH=/Users/marcus/.docker/machine/machines/docker-1.11.2
-
-### Latest release version
-Supports a subset of the Docker Remote API [v1.37](https://docs.docker.com/engine/api/v1.37/), Docker Server version since 1.12.6
-
-
- com.github.docker-java
- docker-java
-
- 3.X.Y
-
-
-### Latest development version
-May contain new features while they are not released.
-
-You can find the latest development version including javadoc and source files on [Sonatypes OSS repository](https://oss.sonatype.org/content/groups/public/com/github/docker-java/docker-java/).
-
-
- com.github.docker-java
- docker-java
- 3.X.Y-SNAPSHOT
-
-
-
-## Documentation
-
-For code examples, please look at the [Wiki](https://github.com/docker-java/docker-java/wiki) or [Test cases](https://github.com/docker-java/docker-java/tree/master/src/test/java/com/github/dockerjava/core/command "Test cases")
-
-## Configuration
-
-There are a couple of configuration items, all of which have sensible defaults:
-
-* `DOCKER_HOST` The Docker Host URL, e.g. `tcp://localhost:2376` or `unix:///var/run/docker.sock`
-* `DOCKER_TLS_VERIFY` enable/disable TLS verification (switch between `http` and `https` protocol)
-* `DOCKER_CERT_PATH` Path to the certificates needed for TLS verification
-* `DOCKER_CONFIG` Path for additional docker configuration files (like `.dockercfg`)
-* `api.version` The API version, e.g. `1.23`.
-* `registry.url` Your registry's address.
-* `registry.username` Your registry username (required to push containers).
-* `registry.password` Your registry password.
-* `registry.email` Your registry email.
-
-There are three ways to configure, in descending order of precedence:
-
-#### Programmatic:
-In your application, e.g.
-
- DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
- .withDockerHost("tcp://my-docker-host.tld:2376")
- .withDockerTlsVerify(true)
- .withDockerCertPath("/home/user/.docker/certs")
- .withDockerConfig("/home/user/.docker")
- .withApiVersion("1.30") // optional
- .withRegistryUrl("https://index.docker.io/v1/")
- .withRegistryUsername("dockeruser")
- .withRegistryPassword("ilovedocker")
- .withRegistryEmail("dockeruser@github.com")
- .build();
- DockerClient docker = DockerClientBuilder.getInstance(config).build();
-
-#### Properties (docker-java.properties)
-
- DOCKER_HOST=tcp://localhost:2376
- DOCKER_TLS_VERIFY=1
- DOCKER_CERT_PATH=/home/user/.docker/certs
- DOCKER_CONFIG=/home/user/.docker
- api.version=1.23
- registry.url=https://index.docker.io/v1/
- registry.username=dockeruser
- registry.password=ilovedocker
- registry.email=dockeruser@github.com
-
-##### System Properties:
-
- java -DDOCKER_HOST=tcp://localhost:2375 -Dregistry.username=dockeruser pkg.Main
-
-##### System Environment
-
- export DOCKER_HOST=tcp://localhost:2376
- export DOCKER_TLS_VERIFY=1
- export DOCKER_CERT_PATH=/home/user/.docker/certs
- export DOCKER_CONFIG=/home/user/.docker
-
-##### File System
-
-In `$HOME/.docker-java.properties`
-
-##### Class Path
-
-In the class path at `/docker-java.properties`
-
+# [Read the documentation here](docs/README.md)
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 b8b0af838..dda682ab1 100644
--- a/docker-java-api/pom.xml
+++ b/docker-java-api/pom.xml
@@ -4,22 +4,26 @@
com.github.docker-javadocker-java-parent
- 3.2.0-SNAPSHOT
+ 0-SNAPSHOT../pom.xmldocker-java-api
- bundle
+ jardocker-java-apihttps://github.com/docker-java/docker-javaJava API Client for Docker
+
+ com.github.dockerjava.api
+
+
com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
+ jackson-annotations
+ 2.20
@@ -38,9 +42,31 @@
org.projectlomboklombok
- 1.18.10
+ 1.18.38provided
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.13.4
+ test
+
+
+
+ com.tngtech.archunit
+ archunit-junit5
+ 1.4.1
+ test
+
+
+
+ com.tngtech.archunit
+ archunit
+ 0.18.0
+ test
+
@@ -55,6 +81,22 @@
+
+ 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 7762be0a7..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,9 +6,11 @@
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;
+import com.github.dockerjava.api.command.CreateConfigCmd;
import com.github.dockerjava.api.command.CreateContainerCmd;
import com.github.dockerjava.api.command.CreateImageCmd;
import com.github.dockerjava.api.command.CreateNetworkCmd;
@@ -21,9 +23,11 @@
import com.github.dockerjava.api.command.ExecStartCmd;
import com.github.dockerjava.api.command.InfoCmd;
import com.github.dockerjava.api.command.InitializeSwarmCmd;
+import com.github.dockerjava.api.command.InspectConfigCmd;
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;
@@ -31,6 +35,7 @@
import com.github.dockerjava.api.command.JoinSwarmCmd;
import com.github.dockerjava.api.command.KillContainerCmd;
import com.github.dockerjava.api.command.LeaveSwarmCmd;
+import com.github.dockerjava.api.command.ListConfigsCmd;
import com.github.dockerjava.api.command.ListContainersCmd;
import com.github.dockerjava.api.command.ListImagesCmd;
import com.github.dockerjava.api.command.ListNetworksCmd;
@@ -39,6 +44,7 @@
import com.github.dockerjava.api.command.ListSwarmNodesCmd;
import com.github.dockerjava.api.command.ListTasksCmd;
import com.github.dockerjava.api.command.ListVolumesCmd;
+import com.github.dockerjava.api.command.LoadImageAsyncCmd;
import com.github.dockerjava.api.command.LoadImageCmd;
import com.github.dockerjava.api.command.LogContainerCmd;
import com.github.dockerjava.api.command.LogSwarmObjectCmd;
@@ -47,15 +53,20 @@
import com.github.dockerjava.api.command.PruneCmd;
import com.github.dockerjava.api.command.PullImageCmd;
import com.github.dockerjava.api.command.PushImageCmd;
+import com.github.dockerjava.api.command.RemoveConfigCmd;
import com.github.dockerjava.api.command.RemoveContainerCmd;
import com.github.dockerjava.api.command.RemoveImageCmd;
import com.github.dockerjava.api.command.RemoveNetworkCmd;
import com.github.dockerjava.api.command.RemoveSecretCmd;
import com.github.dockerjava.api.command.RemoveServiceCmd;
+import com.github.dockerjava.api.command.RemoveSwarmNodeCmd;
import com.github.dockerjava.api.command.RemoveVolumeCmd;
import com.github.dockerjava.api.command.RenameContainerCmd;
+import com.github.dockerjava.api.command.ResizeContainerCmd;
+import com.github.dockerjava.api.command.ResizeExecCmd;
import com.github.dockerjava.api.command.RestartContainerCmd;
import com.github.dockerjava.api.command.SaveImageCmd;
+import com.github.dockerjava.api.command.SaveImagesCmd;
import com.github.dockerjava.api.command.SearchImagesCmd;
import com.github.dockerjava.api.command.StartContainerCmd;
import com.github.dockerjava.api.command.StatsCmd;
@@ -123,6 +134,8 @@ public interface DockerClient extends Closeable {
*/
LoadImageCmd loadImageCmd(@Nonnull InputStream imageStream);
+ LoadImageAsyncCmd loadImageAsyncCmd(@Nonnull InputStream imageStream);
+
SearchImagesCmd searchImagesCmd(@Nonnull String term);
RemoveImageCmd removeImageCmd(@Nonnull String imageId);
@@ -131,12 +144,20 @@ 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.
*/
SaveImageCmd saveImageCmd(@Nonnull String name);
+ /**
+ * Command to download multiple images at once.
+ * @return command (builder)
+ */
+ SaveImagesCmd saveImagesCmd();
+
/**
* * CONTAINER API *
*/
@@ -158,6 +179,8 @@ public interface DockerClient extends Closeable {
ExecCreateCmd execCreateCmd(@Nonnull String containerId);
+ ResizeExecCmd resizeExecCmd(@Nonnull String execId);
+
InspectContainerCmd inspectContainerCmd(@Nonnull String containerId);
RemoveContainerCmd removeContainerCmd(@Nonnull String containerId);
@@ -211,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);
@@ -235,6 +267,8 @@ public interface DockerClient extends Closeable {
RestartContainerCmd restartContainerCmd(@Nonnull String containerId);
+ ResizeContainerCmd resizeContainerCmd(@Nonnull String containerId);
+
CommitCmd commitCmd(@Nonnull String containerId);
BuildImageCmd buildImageCmd();
@@ -325,6 +359,15 @@ public interface DockerClient extends Closeable {
*/
UpdateSwarmNodeCmd updateSwarmNodeCmd();
+ /**
+ * Remove the swarm node
+ *
+ * @param swarmNodeId swarmNodeId
+ * @return the command
+ * @since 1.24
+ */
+ RemoveSwarmNodeCmd removeSwarmNodeCmd(String swarmNodeId);
+
/**
* List nodes in swarm
*
@@ -422,12 +465,47 @@ public interface DockerClient extends Closeable {
/**
* Command to remove a secret
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_25}
* @param secretId secret id or secret name
* @return command
*/
RemoveSecretCmd removeSecretCmd(String secretId);
+ /**
+ * Command to list all configs. Only applicable if docker runs in swarm mode.
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ * @return command
+ */
+ ListConfigsCmd listConfigsCmd();
+
+ /**
+ * Command to create a config in a docker swarm. Only applicable if docker runs in swarm mode.
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ * @return command
+ */
+ CreateConfigCmd createConfigCmd();
+
+ /**
+ * Command to inspect a service
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ * @param configId config id or config name
+ * @return command
+ */
+ InspectConfigCmd inspectConfigCmd(String configId);
+
+ /**
+ * Command to remove a config
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ * @param configId config id or config name
+ * @return command
+ */
+ RemoveConfigCmd removeConfigCmd(String configId);
+
@Override
void close() throws IOException;
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
new file mode 100644
index 000000000..da600bd4d
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/DockerClientDelegate.java
@@ -0,0 +1,539 @@
+package com.github.dockerjava.api;
+
+import com.github.dockerjava.api.command.AttachContainerCmd;
+import com.github.dockerjava.api.command.AuthCmd;
+import com.github.dockerjava.api.command.BuildImageCmd;
+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;
+import com.github.dockerjava.api.command.CreateConfigCmd;
+import com.github.dockerjava.api.command.CreateContainerCmd;
+import com.github.dockerjava.api.command.CreateImageCmd;
+import com.github.dockerjava.api.command.CreateNetworkCmd;
+import com.github.dockerjava.api.command.CreateSecretCmd;
+import com.github.dockerjava.api.command.CreateServiceCmd;
+import com.github.dockerjava.api.command.CreateVolumeCmd;
+import com.github.dockerjava.api.command.DisconnectFromNetworkCmd;
+import com.github.dockerjava.api.command.EventsCmd;
+import com.github.dockerjava.api.command.ExecCreateCmd;
+import com.github.dockerjava.api.command.ExecStartCmd;
+import com.github.dockerjava.api.command.InfoCmd;
+import com.github.dockerjava.api.command.InitializeSwarmCmd;
+import com.github.dockerjava.api.command.InspectConfigCmd;
+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;
+import com.github.dockerjava.api.command.InspectVolumeCmd;
+import com.github.dockerjava.api.command.JoinSwarmCmd;
+import com.github.dockerjava.api.command.KillContainerCmd;
+import com.github.dockerjava.api.command.LeaveSwarmCmd;
+import com.github.dockerjava.api.command.ListConfigsCmd;
+import com.github.dockerjava.api.command.ListContainersCmd;
+import com.github.dockerjava.api.command.ListImagesCmd;
+import com.github.dockerjava.api.command.ListNetworksCmd;
+import com.github.dockerjava.api.command.ListSecretsCmd;
+import com.github.dockerjava.api.command.ListServicesCmd;
+import com.github.dockerjava.api.command.ListSwarmNodesCmd;
+import com.github.dockerjava.api.command.ListTasksCmd;
+import com.github.dockerjava.api.command.ListVolumesCmd;
+import com.github.dockerjava.api.command.LoadImageAsyncCmd;
+import com.github.dockerjava.api.command.LoadImageCmd;
+import com.github.dockerjava.api.command.LogContainerCmd;
+import com.github.dockerjava.api.command.LogSwarmObjectCmd;
+import com.github.dockerjava.api.command.PauseContainerCmd;
+import com.github.dockerjava.api.command.PingCmd;
+import com.github.dockerjava.api.command.PruneCmd;
+import com.github.dockerjava.api.command.PullImageCmd;
+import com.github.dockerjava.api.command.PushImageCmd;
+import com.github.dockerjava.api.command.RemoveConfigCmd;
+import com.github.dockerjava.api.command.RemoveContainerCmd;
+import com.github.dockerjava.api.command.RemoveImageCmd;
+import com.github.dockerjava.api.command.RemoveNetworkCmd;
+import com.github.dockerjava.api.command.RemoveSecretCmd;
+import com.github.dockerjava.api.command.RemoveServiceCmd;
+import com.github.dockerjava.api.command.RemoveSwarmNodeCmd;
+import com.github.dockerjava.api.command.RemoveVolumeCmd;
+import com.github.dockerjava.api.command.RenameContainerCmd;
+import com.github.dockerjava.api.command.ResizeContainerCmd;
+import com.github.dockerjava.api.command.ResizeExecCmd;
+import com.github.dockerjava.api.command.RestartContainerCmd;
+import com.github.dockerjava.api.command.SaveImageCmd;
+import com.github.dockerjava.api.command.SaveImagesCmd;
+import com.github.dockerjava.api.command.SearchImagesCmd;
+import com.github.dockerjava.api.command.StartContainerCmd;
+import com.github.dockerjava.api.command.StatsCmd;
+import com.github.dockerjava.api.command.StopContainerCmd;
+import com.github.dockerjava.api.command.TagImageCmd;
+import com.github.dockerjava.api.command.TopContainerCmd;
+import com.github.dockerjava.api.command.UnpauseContainerCmd;
+import com.github.dockerjava.api.command.UpdateContainerCmd;
+import com.github.dockerjava.api.command.UpdateServiceCmd;
+import com.github.dockerjava.api.command.UpdateSwarmCmd;
+import com.github.dockerjava.api.command.UpdateSwarmNodeCmd;
+import com.github.dockerjava.api.command.VersionCmd;
+import com.github.dockerjava.api.command.WaitContainerCmd;
+import com.github.dockerjava.api.exception.DockerException;
+import com.github.dockerjava.api.model.AuthConfig;
+import com.github.dockerjava.api.model.Identifier;
+import com.github.dockerjava.api.model.PruneType;
+import com.github.dockerjava.api.model.SecretSpec;
+import com.github.dockerjava.api.model.ServiceSpec;
+import com.github.dockerjava.api.model.SwarmSpec;
+
+import javax.annotation.Nonnull;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @apiNote implementations MUST override {{@link #getDockerClient()}}
+ * @implNote We're not using an abstract class here because we want
+ * Java compiler to force us to implement every {@link DockerClient}'s method,
+ * especially when new methods are added
+ */
+@SuppressWarnings("unused")
+public class DockerClientDelegate implements DockerClient {
+
+ protected DockerClient getDockerClient() {
+ throw new IllegalStateException("Implement me!");
+ }
+
+ @Override
+ public AuthConfig authConfig() throws DockerException {
+ return getDockerClient().authConfig();
+ }
+
+ @Override
+ public AuthCmd authCmd() {
+ return getDockerClient().authCmd();
+ }
+
+ @Override
+ public InfoCmd infoCmd() {
+ return getDockerClient().infoCmd();
+ }
+
+ @Override
+ public PingCmd pingCmd() {
+ return getDockerClient().pingCmd();
+ }
+
+ @Override
+ public VersionCmd versionCmd() {
+ return getDockerClient().versionCmd();
+ }
+
+ @Override
+ public PullImageCmd pullImageCmd(@Nonnull String repository) {
+ return getDockerClient().pullImageCmd(repository);
+ }
+
+ @Override
+ public PushImageCmd pushImageCmd(@Nonnull String name) {
+ return getDockerClient().pushImageCmd(name);
+ }
+
+ @Override
+ public PushImageCmd pushImageCmd(@Nonnull Identifier identifier) {
+ return getDockerClient().pushImageCmd(identifier);
+ }
+
+ @Override
+ public CreateImageCmd createImageCmd(@Nonnull String repository, @Nonnull InputStream imageStream) {
+ return getDockerClient().createImageCmd(repository, imageStream);
+ }
+
+ @Override
+ public LoadImageCmd loadImageCmd(@Nonnull InputStream imageStream) {
+ return getDockerClient().loadImageCmd(imageStream);
+ }
+
+ @Override
+ public LoadImageAsyncCmd loadImageAsyncCmd(@Nonnull InputStream imageStream) {
+ return getDockerClient().loadImageAsyncCmd(imageStream);
+ }
+
+ @Override
+ public SearchImagesCmd searchImagesCmd(@Nonnull String term) {
+ return getDockerClient().searchImagesCmd(term);
+ }
+
+ @Override
+ public RemoveImageCmd removeImageCmd(@Nonnull String imageId) {
+ return getDockerClient().removeImageCmd(imageId);
+ }
+
+ @Override
+ public ListImagesCmd listImagesCmd() {
+ return getDockerClient().listImagesCmd();
+ }
+
+ @Override
+ 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);
+ }
+
+ @Override
+ public SaveImagesCmd saveImagesCmd() {
+ return getDockerClient().saveImagesCmd();
+ }
+
+ @Override
+ public ListContainersCmd listContainersCmd() {
+ return getDockerClient().listContainersCmd();
+ }
+
+ @Override
+ public CreateContainerCmd createContainerCmd(@Nonnull String image) {
+ return getDockerClient().createContainerCmd(image);
+ }
+
+ @Override
+ public StartContainerCmd startContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().startContainerCmd(containerId);
+ }
+
+ @Override
+ public ExecCreateCmd execCreateCmd(@Nonnull String containerId) {
+ return getDockerClient().execCreateCmd(containerId);
+ }
+
+ @Override
+ public ResizeExecCmd resizeExecCmd(@Nonnull String execId) {
+ return getDockerClient().resizeExecCmd(execId);
+ }
+
+ @Override
+ public InspectContainerCmd inspectContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().inspectContainerCmd(containerId);
+ }
+
+ @Override
+ public RemoveContainerCmd removeContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().removeContainerCmd(containerId);
+ }
+
+ @Override
+ public WaitContainerCmd waitContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().waitContainerCmd(containerId);
+ }
+
+ @Override
+ public AttachContainerCmd attachContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().attachContainerCmd(containerId);
+ }
+
+ @Override
+ public ExecStartCmd execStartCmd(@Nonnull String execId) {
+ return getDockerClient().execStartCmd(execId);
+ }
+
+ @Override
+ public InspectExecCmd inspectExecCmd(@Nonnull String execId) {
+ return getDockerClient().inspectExecCmd(execId);
+ }
+
+ @Override
+ public LogContainerCmd logContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().logContainerCmd(containerId);
+ }
+
+ @Override
+ public CopyArchiveFromContainerCmd copyArchiveFromContainerCmd(@Nonnull String containerId, @Nonnull String resource) {
+ return getDockerClient().copyArchiveFromContainerCmd(containerId, resource);
+ }
+
+ @Override
+ @Deprecated
+ public CopyFileFromContainerCmd copyFileFromContainerCmd(@Nonnull String containerId, @Nonnull String resource) {
+ return getDockerClient().copyFileFromContainerCmd(containerId, resource);
+ }
+
+ @Override
+ public CopyArchiveToContainerCmd copyArchiveToContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().copyArchiveToContainerCmd(containerId);
+ }
+
+ @Override
+ 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);
+ }
+
+ @Override
+ public KillContainerCmd killContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().killContainerCmd(containerId);
+ }
+
+ @Override
+ public UpdateContainerCmd updateContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().updateContainerCmd(containerId);
+ }
+
+ @Override
+ public RenameContainerCmd renameContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().renameContainerCmd(containerId);
+ }
+
+ @Override
+ public RestartContainerCmd restartContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().restartContainerCmd(containerId);
+ }
+
+ @Override
+ public ResizeContainerCmd resizeContainerCmd(@Nonnull String containerId) {
+ return getDockerClient().resizeContainerCmd(containerId);
+ }
+
+ @Override
+ public CommitCmd commitCmd(@Nonnull String containerId) {
+ return getDockerClient().commitCmd(containerId);
+ }
+
+ @Override
+ public BuildImageCmd buildImageCmd() {
+ return getDockerClient().buildImageCmd();
+ }
+
+ @Override
+ public BuildImageCmd buildImageCmd(File dockerFileOrFolder) {
+ return getDockerClient().buildImageCmd(dockerFileOrFolder);
+ }
+
+ @Override
+ public BuildImageCmd buildImageCmd(InputStream tarInputStream) {
+ return getDockerClient().buildImageCmd(tarInputStream);
+ }
+
+ @Override
+ public TopContainerCmd topContainerCmd(String containerId) {
+ return getDockerClient().topContainerCmd(containerId);
+ }
+
+ @Override
+ public TagImageCmd tagImageCmd(String imageId, String imageNameWithRepository, String tag) {
+ return getDockerClient().tagImageCmd(imageId, imageNameWithRepository, tag);
+ }
+
+ @Override
+ public PauseContainerCmd pauseContainerCmd(String containerId) {
+ return getDockerClient().pauseContainerCmd(containerId);
+ }
+
+ @Override
+ public UnpauseContainerCmd unpauseContainerCmd(String containerId) {
+ return getDockerClient().unpauseContainerCmd(containerId);
+ }
+
+ @Override
+ public EventsCmd eventsCmd() {
+ return getDockerClient().eventsCmd();
+ }
+
+ @Override
+ public StatsCmd statsCmd(String containerId) {
+ return getDockerClient().statsCmd(containerId);
+ }
+
+ @Override
+ public CreateVolumeCmd createVolumeCmd() {
+ return getDockerClient().createVolumeCmd();
+ }
+
+ @Override
+ public InspectVolumeCmd inspectVolumeCmd(String name) {
+ return getDockerClient().inspectVolumeCmd(name);
+ }
+
+ @Override
+ public RemoveVolumeCmd removeVolumeCmd(String name) {
+ return getDockerClient().removeVolumeCmd(name);
+ }
+
+ @Override
+ public ListVolumesCmd listVolumesCmd() {
+ return getDockerClient().listVolumesCmd();
+ }
+
+ @Override
+ public ListNetworksCmd listNetworksCmd() {
+ return getDockerClient().listNetworksCmd();
+ }
+
+ @Override
+ public InspectNetworkCmd inspectNetworkCmd() {
+ return getDockerClient().inspectNetworkCmd();
+ }
+
+ @Override
+ public CreateNetworkCmd createNetworkCmd() {
+ return getDockerClient().createNetworkCmd();
+ }
+
+ @Override
+ public RemoveNetworkCmd removeNetworkCmd(@Nonnull String networkId) {
+ return getDockerClient().removeNetworkCmd(networkId);
+ }
+
+ @Override
+ public ConnectToNetworkCmd connectToNetworkCmd() {
+ return getDockerClient().connectToNetworkCmd();
+ }
+
+ @Override
+ public DisconnectFromNetworkCmd disconnectFromNetworkCmd() {
+ return getDockerClient().disconnectFromNetworkCmd();
+ }
+
+ @Override
+ public InitializeSwarmCmd initializeSwarmCmd(SwarmSpec swarmSpec) {
+ return getDockerClient().initializeSwarmCmd(swarmSpec);
+ }
+
+ @Override
+ public InspectSwarmCmd inspectSwarmCmd() {
+ return getDockerClient().inspectSwarmCmd();
+ }
+
+ @Override
+ public JoinSwarmCmd joinSwarmCmd() {
+ return getDockerClient().joinSwarmCmd();
+ }
+
+ @Override
+ public LeaveSwarmCmd leaveSwarmCmd() {
+ return getDockerClient().leaveSwarmCmd();
+ }
+
+ @Override
+ public UpdateSwarmCmd updateSwarmCmd(SwarmSpec swarmSpec) {
+ return getDockerClient().updateSwarmCmd(swarmSpec);
+ }
+
+ @Override
+ public UpdateSwarmNodeCmd updateSwarmNodeCmd() {
+ return getDockerClient().updateSwarmNodeCmd();
+ }
+
+ @Override
+ public RemoveSwarmNodeCmd removeSwarmNodeCmd(String swarmNodeId) {
+ return getDockerClient().removeSwarmNodeCmd(swarmNodeId);
+ }
+
+ @Override
+ public ListSwarmNodesCmd listSwarmNodesCmd() {
+ return getDockerClient().listSwarmNodesCmd();
+ }
+
+ @Override
+ public ListServicesCmd listServicesCmd() {
+ return getDockerClient().listServicesCmd();
+ }
+
+ @Override
+ public CreateServiceCmd createServiceCmd(ServiceSpec serviceSpec) {
+ return getDockerClient().createServiceCmd(serviceSpec);
+ }
+
+ @Override
+ public InspectServiceCmd inspectServiceCmd(String serviceId) {
+ return getDockerClient().inspectServiceCmd(serviceId);
+ }
+
+ @Override
+ public UpdateServiceCmd updateServiceCmd(String serviceId, ServiceSpec serviceSpec) {
+ return getDockerClient().updateServiceCmd(serviceId, serviceSpec);
+ }
+
+ @Override
+ public RemoveServiceCmd removeServiceCmd(String serviceId) {
+ return getDockerClient().removeServiceCmd(serviceId);
+ }
+
+ @Override
+ public ListTasksCmd listTasksCmd() {
+ return getDockerClient().listTasksCmd();
+ }
+
+ @Override
+ public LogSwarmObjectCmd logServiceCmd(String serviceId) {
+ return getDockerClient().logServiceCmd(serviceId);
+ }
+
+ @Override
+ public LogSwarmObjectCmd logTaskCmd(String taskId) {
+ return getDockerClient().logTaskCmd(taskId);
+ }
+
+ @Override
+ public PruneCmd pruneCmd(PruneType pruneType) {
+ return getDockerClient().pruneCmd(pruneType);
+ }
+
+ @Override
+ public ListSecretsCmd listSecretsCmd() {
+ return getDockerClient().listSecretsCmd();
+ }
+
+ @Override
+ public CreateSecretCmd createSecretCmd(SecretSpec secretSpec) {
+ return getDockerClient().createSecretCmd(secretSpec);
+ }
+
+ @Override
+ public RemoveSecretCmd removeSecretCmd(String secretId) {
+ return getDockerClient().removeSecretCmd(secretId);
+ }
+
+ @Override
+ public ListConfigsCmd listConfigsCmd() {
+ return getDockerClient().listConfigsCmd();
+ }
+
+ @Override
+ public CreateConfigCmd createConfigCmd() {
+ return getDockerClient().createConfigCmd();
+ }
+
+ @Override
+ public InspectConfigCmd inspectConfigCmd(String configId) {
+ return getDockerClient().inspectConfigCmd(configId);
+ }
+
+ @Override
+ public RemoveConfigCmd removeConfigCmd(String configId) {
+ return getDockerClient().removeConfigCmd(configId);
+ }
+
+ @Override
+ public void close() throws IOException {
+ getDockerClient().close();
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/async/ResultCallback.java b/docker-java-api/src/main/java/com/github/dockerjava/api/async/ResultCallback.java
index 5b9fdb81c..6a244d620 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/async/ResultCallback.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/async/ResultCallback.java
@@ -6,6 +6,14 @@
* Result callback
*/
public interface ResultCallback extends Closeable {
+
+ class Adapter extends ResultCallbackTemplate, A_RES_T> {
+ @Override
+ public void onNext(A_RES_T object) {
+
+ }
+ }
+
/**
* Called when the async processing starts respectively when the response arrives from the server. The passed {@link Closeable} can be
* used to close/interrupt the processing.
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/async/ResultCallbackTemplate.java b/docker-java-api/src/main/java/com/github/dockerjava/api/async/ResultCallbackTemplate.java
index 8c56ab093..911e67826 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/async/ResultCallbackTemplate.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/async/ResultCallbackTemplate.java
@@ -87,10 +87,18 @@ public void close() throws IOException {
*/
@SuppressWarnings("unchecked")
public RC_T awaitCompletion() throws InterruptedException {
- completed.await();
- // eventually (re)throws RuntimeException
- throwFirstError();
- return (RC_T) this;
+ try {
+ completed.await();
+ // eventually (re)throws RuntimeException
+ throwFirstError();
+ return (RC_T) this;
+ } finally {
+ try {
+ close();
+ } catch (IOException e) {
+ LOGGER.debug("Failed to close", e);
+ }
+ }
}
/**
@@ -99,9 +107,17 @@ public RC_T awaitCompletion() throws InterruptedException {
* before {@link ResultCallback#onComplete()} was called.
*/
public boolean awaitCompletion(long timeout, TimeUnit timeUnit) throws InterruptedException {
- boolean result = completed.await(timeout, timeUnit);
- throwFirstError();
- return result;
+ try {
+ boolean result = completed.await(timeout, timeUnit);
+ throwFirstError();
+ return result;
+ } finally {
+ try {
+ close();
+ } catch (IOException e) {
+ LOGGER.debug("Failed to close", e);
+ }
+ }
}
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/AsyncDockerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/AsyncDockerCmd.java
index 3218a8419..b2f287cc2 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/AsyncDockerCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/AsyncDockerCmd.java
@@ -4,6 +4,7 @@
package com.github.dockerjava.api.command;
import com.github.dockerjava.api.async.ResultCallback;
+import com.github.dockerjava.api.async.ResultCallbackTemplate;
/**
*
@@ -15,4 +16,7 @@ public interface AsyncDockerCmd, A_
> T exec(T resultCallback);
+ default ResultCallbackTemplate, A_RES_T> start() {
+ return exec(new ResultCallback.Adapter<>());
+ }
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java
index 9cf1da7aa..1b7b76a67 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageCmd.java
@@ -1,17 +1,16 @@
package com.github.dockerjava.api.command;
+import com.github.dockerjava.api.model.AuthConfigurations;
+import com.github.dockerjava.api.model.BuildResponseItem;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
import java.io.File;
import java.io.InputStream;
import java.net.URI;
import java.util.Map;
import java.util.Set;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-import com.github.dockerjava.api.model.AuthConfigurations;
-import com.github.dockerjava.api.model.BuildResponseItem;
-
/**
* Build an image from Dockerfile.
*
@@ -145,6 +144,12 @@ public interface BuildImageCmd extends AsyncDockerCmd getExtraHosts();
+
// setters
/**
@@ -223,6 +228,16 @@ public interface BuildImageCmd extends AsyncDockerCmd extraHosts);
+
+ @Override
+ default BuildImageResultCallback start() {
+ return exec(new BuildImageResultCallback());
+ }
+
interface Exec extends DockerCmdAsyncExec {
}
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
new file mode 100644
index 000000000..9db21a6c4
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/BuildImageResultCallback.java
@@ -0,0 +1,80 @@
+/*
+ * Created on 21.07.2015
+ */
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.async.ResultCallbackTemplate;
+import com.github.dockerjava.api.exception.DockerClientException;
+import com.github.dockerjava.api.model.BuildResponseItem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ *
+ * @author Marcus Linke
+ *
+ */
+public class BuildImageResultCallback extends ResultCallbackTemplate {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(BuildImageResultCallback.class);
+
+ private String imageId;
+
+ private String error;
+
+ @Override
+ public void onNext(BuildResponseItem item) {
+ if (item.isBuildSuccessIndicated()) {
+ this.imageId = item.getImageId();
+ } else if (item.isErrorIndicated()) {
+ this.error = item.getError();
+ }
+ LOGGER.debug("{}", item);
+ }
+
+ /**
+ * Awaits the image id from the response stream.
+ *
+ * @throws DockerClientException
+ * if the build fails.
+ */
+ public String awaitImageId() {
+ try {
+ awaitCompletion();
+ } catch (InterruptedException e) {
+ throw new DockerClientException("", e);
+ }
+
+ return getImageId();
+ }
+
+ /**
+ * Awaits the image id from the response stream.
+ *
+ * @throws DockerClientException
+ * if the build fails or the timeout occurs.
+ */
+ public String awaitImageId(long timeout, TimeUnit timeUnit) {
+ try {
+ awaitCompletion(timeout, timeUnit);
+ } catch (InterruptedException e) {
+ throw new DockerClientException("Awaiting image id interrupted: ", e);
+ }
+
+ return getImageId();
+ }
+
+ private String getImageId() {
+ if (error != null) {
+ throw new DockerClientException("Could not build image: " + error);
+ }
+
+ if (imageId != null) {
+ return imageId;
+ }
+
+ throw new DockerClientException("Could not build image");
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CopyArchiveToContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CopyArchiveToContainerCmd.java
index a4dfb5c03..19b3c3843 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CopyArchiveToContainerCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CopyArchiveToContainerCmd.java
@@ -16,6 +16,7 @@ public interface CopyArchiveToContainerCmd extends SyncDockerCmd {
boolean isDirChildrenOnly();
+ boolean isCopyUIDGID();
/**
* Set container's id
*
@@ -49,6 +50,14 @@ public interface CopyArchiveToContainerCmd extends SyncDockerCmd {
*/
CopyArchiveToContainerCmd withNoOverwriteDirNonDir(boolean noOverwriteDirNonDir);
+ /**
+ * If set to true then ownership is set to the user and primary group at the destination
+ *
+ * @param copyUIDGID
+ * flag to know if ownership should be set to the user and primary group at the destination
+ */
+ CopyArchiveToContainerCmd withCopyUIDGID(boolean copyUIDGID);
+
/**
* If this flag is set to true, all children of the local directory will be copied to the remote without the root directory. For ex: if
* I have root/titi and root/tata and the remote path is /var/data. dirChildrenOnly = true will create /var/data/titi and /var/data/tata
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateConfigCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateConfigCmd.java
new file mode 100644
index 000000000..205bc7a7d
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateConfigCmd.java
@@ -0,0 +1,51 @@
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.exception.ConflictException;
+
+import javax.annotation.CheckForNull;
+import java.util.Map;
+
+/**
+ * Command to create a new config
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ */
+public interface CreateConfigCmd extends SyncDockerCmd {
+
+ @CheckForNull
+ String getName();
+
+ @CheckForNull
+ String getData();
+
+ @CheckForNull
+ Map getLabels();
+
+ /**
+ * @param name
+ * - The new config name.
+ */
+ CreateConfigCmd withName(String name);
+
+ /**
+ * @param data
+ * - The new config data.
+ */
+ CreateConfigCmd withData(byte[] data);
+
+ /**
+ * @param labels
+ * - A mapping of labels keys and values. Labels are a mechanism for applying metadata to Docker objects.
+ */
+ CreateConfigCmd withLabels(Map labels);
+
+ /**
+ * @throws ConflictException Named config already exists
+ */
+ @Override
+ CreateConfigResponse exec() throws ConflictException;
+
+ interface Exec extends DockerCmdSyncExec {
+ }
+
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateConfigResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateConfigResponse.java
new file mode 100644
index 000000000..5836275ff
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateConfigResponse.java
@@ -0,0 +1,20 @@
+package com.github.dockerjava.api.command;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * The response of a {@link CreateConfigCmd}
+ */
+@EqualsAndHashCode
+@ToString
+public class CreateConfigResponse extends DockerObject {
+ @JsonProperty("ID")
+ private String id;
+
+ public String getId() {
+ return id;
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java
index b24b40401..fba83f50c 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerCmd.java
@@ -1,5 +1,6 @@
package com.github.dockerjava.api.command;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import com.github.dockerjava.api.exception.ConflictException;
import com.github.dockerjava.api.exception.NotFoundException;
import com.github.dockerjava.api.model.AuthConfig;
@@ -22,6 +23,9 @@
import javax.annotation.CheckForNull;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
+
+import static java.util.Objects.requireNonNull;
public interface CreateContainerCmd extends SyncDockerCmd {
@@ -40,15 +44,37 @@ public interface CreateContainerCmd extends SyncDockerCmd getAliases();
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
@CheckForNull
- Bind[] getBinds();
+ @JsonIgnore
+ default Bind[] getBinds() {
+ return getHostConfig().getBinds();
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withBinds(Bind... binds);
+ default CreateContainerCmd withBinds(Bind... binds) {
+ Objects.requireNonNull(binds, "binds was not specified");
+ getHostConfig().setBinds(binds);
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withBinds(List binds);
+ default CreateContainerCmd withBinds(List binds) {
+ Objects.requireNonNull(binds, "binds was not specified");
+ return withBinds(binds.toArray(new Bind[binds.size()]));
+ }
/**
* Add network-scoped alias for the container
@@ -144,21 +170,39 @@ public interface CreateContainerCmd extends SyncDockerCmd links);
+ default CreateContainerCmd withLinks(List links) {
+ requireNonNull(links, "links was not specified");
+ return withLinks(links.toArray(new Link[links.size()]));
+ }
@CheckForNull
String getIpv6Address();
@@ -175,26 +219,63 @@ public interface CreateContainerCmd extends SyncDockerCmd'host': use the host network stack inside the container. Note: the host mode gives the container full access to local system
* services such as D-bus and is therefore considered insecure.
*
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withNetworkMode(String networkMode);
+ default CreateContainerCmd withNetworkMode(String networkMode) {
+ Objects.requireNonNull(networkMode, "networkMode was not specified");
+ getHostConfig().withNetworkMode(networkMode);
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
@CheckForNull
- Ports getPortBindings();
+ @JsonIgnore
+ default Ports getPortBindings() {
+ return getHostConfig().getPortBindings();
+ }
/**
* Add one or more {@link PortBinding}s. This corresponds to the --publish (-p) option of the
* docker run CLI command.
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withPortBindings(PortBinding... portBindings);
+ default CreateContainerCmd withPortBindings(PortBinding... portBindings) {
+ Objects.requireNonNull(portBindings, "portBindings was not specified");
+ getHostConfig().withPortBindings(new Ports(portBindings));
+ return this;
+ }
/**
* Add one or more {@link PortBinding}s. This corresponds to the --publish (-p) option of the
* docker run CLI command.
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withPortBindings(List portBindings);
+ default CreateContainerCmd withPortBindings(List portBindings) {
+ Objects.requireNonNull(portBindings, "portBindings was not specified");
+ return withPortBindings(portBindings.toArray(new PortBinding[0]));
+ }
/**
* Add the port bindings that are contained in the given {@link Ports} object.
*
- * @see #withPortBindings(PortBinding...)
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withPortBindings(Ports portBindings);
+ default CreateContainerCmd withPortBindings(Ports portBindings) {
+ Objects.requireNonNull(portBindings, "portBindings was not specified");
+ getHostConfig().withPortBindings(portBindings);
+ return this;
+ }
CreateContainerCmd withName(String name);
@@ -244,12 +353,27 @@ public interface CreateContainerCmd extends SyncDockerCmd portSpecs);
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
@CheckForNull
- Boolean getPrivileged();
+ @JsonIgnore
+ default Boolean getPrivileged() {
+ return getHostConfig().getPrivileged();
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withPrivileged(Boolean privileged);
+ default CreateContainerCmd withPrivileged(Boolean privileged) {
+ Objects.requireNonNull(privileged, "no privileged was specified");
+ getHostConfig().withPrivileged(privileged);
+ return this;
+ }
@CheckForNull
String getUser();
@@ -263,15 +387,37 @@ public interface CreateContainerCmd extends SyncDockerCmd volumes);
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
@CheckForNull
- VolumesFrom[] getVolumesFrom();
+ @JsonIgnore
+ default VolumesFrom[] getVolumesFrom() {
+ return getHostConfig().getVolumesFrom();
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withVolumesFrom(VolumesFrom... volumesFrom);
+ default CreateContainerCmd withVolumesFrom(VolumesFrom... volumesFrom) {
+ Objects.requireNonNull(volumesFrom, "volumesFrom was not specified");
+ getHostConfig().withVolumesFrom(volumesFrom);
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withVolumesFrom(List volumesFrom);
+ default CreateContainerCmd withVolumesFrom(List volumesFrom) {
+ requireNonNull(volumesFrom, "volumesFrom was not specified");
+ return withVolumesFrom(volumesFrom.toArray(new VolumesFrom[volumesFrom.size()]));
+ }
@CheckForNull
String getWorkingDir();
@@ -313,64 +459,133 @@ public interface CreateContainerCmd extends SyncDockerCmd extraHosts);
+ default CreateContainerCmd withExtraHosts(List extraHosts) {
+ requireNonNull(extraHosts, "extraHosts was not specified");
+ return withExtraHosts(extraHosts.toArray(new String[extraHosts.size()]));
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@CheckForNull
@Deprecated
- Capability[] getCapAdd();
+ @JsonIgnore
+ default Capability[] getCapAdd() {
+ return getHostConfig().getCapAdd();
+ }
/**
* Add linux kernel capability to the container. For example:
* adding {@link Capability#MKNOD} allows the container to create special files using the 'mknod' command.
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withCapAdd(Capability... capAdd);
+ default CreateContainerCmd withCapAdd(Capability... capAdd) {
+ requireNonNull(capAdd, "capAdd was not specified");
+ getHostConfig().withCapAdd(capAdd);
+ return this;
+ }
/**
* Add linux kernel capability to the container. For example:
* adding {@link Capability#MKNOD} allows the container to create special files using the 'mknod' command.
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withCapAdd(List capAdd);
+ default CreateContainerCmd withCapAdd(List capAdd) {
+ requireNonNull(capAdd, "capAdd was not specified");
+ return withCapAdd(capAdd.toArray(new Capability[capAdd.size()]));
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@CheckForNull
@Deprecated
- Capability[] getCapDrop();
+ @JsonIgnore
+ default Capability[] getCapDrop() {
+ return getHostConfig().getCapDrop();
+ }
/**
* Drop linux kernel capability from the container. For example:
* dropping {@link Capability#CHOWN} prevents the container from changing the owner of any files.
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withCapDrop(Capability... capDrop);
+ default CreateContainerCmd withCapDrop(Capability... capDrop) {
+ requireNonNull(capDrop, "capDrop was not specified");
+ getHostConfig().withCapDrop(capDrop);
+ return this;
+ }
/**
* Drop linux kernel capability from the container. For example:
* dropping {@link Capability#CHOWN} prevents the container from changing the owner of any files.
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withCapDrop(List capDrop);
+ default CreateContainerCmd withCapDrop(List capDrop) {
+ requireNonNull(capDrop, "capDrop was not specified");
+ return withCapDrop(capDrop.toArray(new Capability[capDrop.size()]));
+ }
@CheckForNull
@@ -386,156 +601,417 @@ public interface CreateContainerCmd extends SyncDockerCmd devices);
+ default CreateContainerCmd withDevices(List devices) {
+ getHostConfig().withDevices(devices);
+ return this;
+ }
/**
* Set custom DNS servers
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withDns(String... dns);
+ default CreateContainerCmd withDns(String... dns) {
+ getHostConfig().withDns(dns);
+ return this;
+ }
/**
* Set custom DNS servers
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withDns(List dns);
+ default CreateContainerCmd withDns(List dns) {
+ getHostConfig().withDns(dns);
+ return this;
+ }
/**
* Set custom DNS search domains
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withDnsSearch(String... dnsSearch);
+ default CreateContainerCmd withDnsSearch(String... dnsSearch) {
+ getHostConfig().withDnsSearch(dnsSearch);
+ return this;
+ }
/**
* Set custom DNS search domains
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withDnsSearch(List dnsSearch);
+ default CreateContainerCmd withDnsSearch(List dnsSearch) {
+ getHostConfig().withDnsSearch(dnsSearch);
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withLogConfig(LogConfig logConfig);
+ default CreateContainerCmd withLogConfig(LogConfig logConfig) {
+ getHostConfig().withLogConfig(logConfig);
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withLxcConf(LxcConf... lxcConf);
+ default CreateContainerCmd withLxcConf(LxcConf... lxcConf) {
+ getHostConfig().withLxcConf(lxcConf);
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withLxcConf(List lxcConf);
+ default CreateContainerCmd withLxcConf(List lxcConf) {
+ getHostConfig().withLxcConf(lxcConf.toArray(new LxcConf[0]));
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withOomKillDisable(Boolean oomKillDisable);
+ default CreateContainerCmd withOomKillDisable(Boolean oomKillDisable) {
+ getHostConfig().withOomKillDisable(oomKillDisable);
+ return this;
+ }
/**
* Set the PID (Process) Namespace mode for the container, 'host': use the host's PID namespace inside the container
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withPidMode(String pidMode);
+ default CreateContainerCmd withPidMode(String pidMode) {
+ getHostConfig().withPidMode(pidMode);
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withReadonlyRootfs(Boolean readonlyRootfs);
+ default CreateContainerCmd withReadonlyRootfs(Boolean readonlyRootfs) {
+ getHostConfig().withReadonlyRootfs(readonlyRootfs);
+ return this;
+ }
/**
* Set custom {@link RestartPolicy} for the container. Defaults to {@link RestartPolicy#noRestart()}
+ *
+ * @deprecated see {@link #getHostConfig()}
*/
@Deprecated
- CreateContainerCmd withRestartPolicy(RestartPolicy restartPolicy);
+ default CreateContainerCmd withRestartPolicy(RestartPolicy restartPolicy) {
+ getHostConfig().withRestartPolicy(restartPolicy);
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withUlimits(Ulimit... ulimits);
+ @JsonIgnore
+ default CreateContainerCmd withUlimits(Ulimit... ulimits) {
+ getHostConfig().withUlimits(ulimits);
+ return this;
+ }
+ /**
+ *
+ * @deprecated see {@link #getHostConfig()}
+ */
@Deprecated
- CreateContainerCmd withUlimits(List ulimits);
+ default CreateContainerCmd withUlimits(List ulimits) {
+ getHostConfig().withUlimits(ulimits);
+ return this;
+ }
+
+ @CheckForNull
+ default String getPlatform() {
+ return null;
+ }
+
+ CreateContainerCmd withPlatform(String platform);
/**
* @throws NotFoundException No such container
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerResponse.java
index b19f8c6ae..ad24d7ec8 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateContainerResponse.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -11,7 +12,7 @@
*/
@EqualsAndHashCode
@ToString
-public class CreateContainerResponse {
+public class CreateContainerResponse extends DockerObject {
@JsonProperty("Id")
private String id;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateImageResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateImageResponse.java
index 09b1929c0..53b2b5367 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateImageResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateImageResponse.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -12,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class CreateImageResponse {
+public class CreateImageResponse extends DockerObject {
@JsonProperty("status")
private String id;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java
index 544ac2083..56b9df17a 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java
@@ -47,7 +47,7 @@ public interface CreateNetworkCmd extends SyncDockerCmd {
/** Name of the network driver to use. Defaults to bridge. */
CreateNetworkCmd withDriver(String driver);
- /** Ipam config, such es subnet, gateway and ip range of the network */
+ /** Ipam config, such as subnet, gateway and ip range of the network */
CreateNetworkCmd withIpam(Ipam ipam);
/** Driver specific options */
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java
index a816f3f3a..3f6f219e1 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java
@@ -1,12 +1,13 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@EqualsAndHashCode
@ToString
-public class CreateNetworkResponse {
+public class CreateNetworkResponse extends DockerObject {
@JsonProperty("Id")
private String id;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateSecretResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateSecretResponse.java
index c9da4c3ba..2c1b6f11b 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateSecretResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateSecretResponse.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -9,7 +10,7 @@
*/
@EqualsAndHashCode
@ToString
-public class CreateSecretResponse {
+public class CreateSecretResponse extends DockerObject {
@JsonProperty("ID")
private String id;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateServiceCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateServiceCmd.java
index dc78642e3..bfcce27ad 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateServiceCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateServiceCmd.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.command;
import com.github.dockerjava.api.exception.ConflictException;
+import com.github.dockerjava.api.model.AuthConfig;
import com.github.dockerjava.api.model.ServiceSpec;
import javax.annotation.CheckForNull;
@@ -15,8 +16,13 @@ public interface CreateServiceCmd extends SyncDockerCmd {
@CheckForNull
ServiceSpec getServiceSpec();
+ @CheckForNull
+ AuthConfig getAuthConfig();
+
CreateServiceCmd withServiceSpec(ServiceSpec serviceSpec);
+ CreateServiceCmd withAuthConfig(AuthConfig authConfig);
+
/**
* @throws ConflictException
* Named service already exists
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateServiceResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateServiceResponse.java
index 1cbd421b9..b68343f55 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateServiceResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateServiceResponse.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -9,7 +10,7 @@
*/
@EqualsAndHashCode
@ToString
-public class CreateServiceResponse {
+public class CreateServiceResponse extends DockerObject {
@JsonProperty("ID")
private String id;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateVolumeCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateVolumeCmd.java
index 3d052033f..4a3ef9819 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateVolumeCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateVolumeCmd.java
@@ -9,6 +9,9 @@ public interface CreateVolumeCmd extends SyncDockerCmd {
@CheckForNull
String getName();
+ @CheckForNull
+ Map getLabels();
+
@CheckForNull
String getDriver();
@@ -21,6 +24,12 @@ public interface CreateVolumeCmd extends SyncDockerCmd {
*/
CreateVolumeCmd withName(String name);
+ /**
+ * @param labels
+ * - A mapping of labels keys and values. Labels are a mechanism for applying metadata to Docker objects.
+ */
+ CreateVolumeCmd withLabels(Map labels);
+
/**
* @param driver
* - Name of the volume driver to use. Defaults to local for the name.
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateVolumeResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateVolumeResponse.java
index a6dffb94d..4afc6f6ba 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateVolumeResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/CreateVolumeResponse.java
@@ -1,20 +1,26 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
+import java.util.Map;
+
/**
*
* @author Marcus Linke
*/
@EqualsAndHashCode
@ToString
-public class CreateVolumeResponse {
+public class CreateVolumeResponse extends DockerObject {
@JsonProperty("Name")
private String name;
+ @JsonProperty("Labels")
+ private Map labels;
+
@JsonProperty("Driver")
private String driver;
@@ -25,6 +31,10 @@ public String getName() {
return name;
}
+ public Map getLabels() {
+ return labels;
+ }
+
public String getDriver() {
return driver;
}
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
new file mode 100644
index 000000000..d7cdd97a9
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/DelegatingDockerCmdExecFactory.java
@@ -0,0 +1,422 @@
+package com.github.dockerjava.api.command;
+
+import java.io.IOException;
+
+public class DelegatingDockerCmdExecFactory implements DockerCmdExecFactory {
+
+ // We're not using abstract class because we want
+ // the compiler to force us to implement new DockerCmdExecFactory when added
+ public DockerCmdExecFactory getDockerCmdExecFactory() {
+ throw new IllegalStateException("Implement me!");
+ }
+
+ @Override
+ public AuthCmd.Exec createAuthCmdExec() {
+ return getDockerCmdExecFactory().createAuthCmdExec();
+ }
+
+ @Override
+ public InfoCmd.Exec createInfoCmdExec() {
+ return getDockerCmdExecFactory().createInfoCmdExec();
+ }
+
+ @Override
+ public PingCmd.Exec createPingCmdExec() {
+ return getDockerCmdExecFactory().createPingCmdExec();
+ }
+
+ @Override
+ public ResizeContainerCmd.Exec createResizeContainerCmdExec() {
+ return getDockerCmdExecFactory().createResizeContainerCmdExec();
+ }
+
+ @Override
+ public ExecCreateCmd.Exec createExecCmdExec() {
+ return getDockerCmdExecFactory().createExecCmdExec();
+ }
+
+ @Override
+ public ResizeExecCmd.Exec createResizeExecCmdExec() {
+ return getDockerCmdExecFactory().createResizeExecCmdExec();
+ }
+
+ @Override
+ public VersionCmd.Exec createVersionCmdExec() {
+ return getDockerCmdExecFactory().createVersionCmdExec();
+ }
+
+ @Override
+ public PullImageCmd.Exec createPullImageCmdExec() {
+ return getDockerCmdExecFactory().createPullImageCmdExec();
+ }
+
+ @Override
+ public PushImageCmd.Exec createPushImageCmdExec() {
+ return getDockerCmdExecFactory().createPushImageCmdExec();
+ }
+
+ @Override
+ public SaveImageCmd.Exec createSaveImageCmdExec() {
+ return getDockerCmdExecFactory().createSaveImageCmdExec();
+ }
+
+ @Override
+ public SaveImagesCmd.Exec createSaveImagesCmdExec() {
+ return getDockerCmdExecFactory().createSaveImagesCmdExec();
+ }
+
+ @Override
+ public CreateImageCmd.Exec createCreateImageCmdExec() {
+ return getDockerCmdExecFactory().createCreateImageCmdExec();
+ }
+
+ @Override
+ public LoadImageCmd.Exec createLoadImageCmdExec() {
+ return getDockerCmdExecFactory().createLoadImageCmdExec();
+ }
+
+ @Override
+ public LoadImageAsyncCmd.Exec createLoadImageAsyncCmdExec() {
+ return getDockerCmdExecFactory().createLoadImageAsyncCmdExec();
+ }
+
+ @Override
+ public SearchImagesCmd.Exec createSearchImagesCmdExec() {
+ return getDockerCmdExecFactory().createSearchImagesCmdExec();
+ }
+
+ @Override
+ public RemoveImageCmd.Exec createRemoveImageCmdExec() {
+ return getDockerCmdExecFactory().createRemoveImageCmdExec();
+ }
+
+ @Override
+ public ListImagesCmd.Exec createListImagesCmdExec() {
+ return getDockerCmdExecFactory().createListImagesCmdExec();
+ }
+
+ @Override
+ public InspectImageCmd.Exec createInspectImageCmdExec() {
+ return getDockerCmdExecFactory().createInspectImageCmdExec();
+ }
+
+ @Override
+ public ImageHistoryCmd.Exec createImageHistoryCmdExec() {
+ return getDockerCmdExecFactory().createImageHistoryCmdExec();
+ }
+
+ @Override
+ public ListContainersCmd.Exec createListContainersCmdExec() {
+ return getDockerCmdExecFactory().createListContainersCmdExec();
+ }
+
+ @Override
+ public CreateContainerCmd.Exec createCreateContainerCmdExec() {
+ return getDockerCmdExecFactory().createCreateContainerCmdExec();
+ }
+
+ @Override
+ public StartContainerCmd.Exec createStartContainerCmdExec() {
+ return getDockerCmdExecFactory().createStartContainerCmdExec();
+ }
+
+ @Override
+ public InspectContainerCmd.Exec createInspectContainerCmdExec() {
+ return getDockerCmdExecFactory().createInspectContainerCmdExec();
+ }
+
+ @Override
+ public RemoveContainerCmd.Exec createRemoveContainerCmdExec() {
+ return getDockerCmdExecFactory().createRemoveContainerCmdExec();
+ }
+
+ @Override
+ public WaitContainerCmd.Exec createWaitContainerCmdExec() {
+ return getDockerCmdExecFactory().createWaitContainerCmdExec();
+ }
+
+ @Override
+ public AttachContainerCmd.Exec createAttachContainerCmdExec() {
+ return getDockerCmdExecFactory().createAttachContainerCmdExec();
+ }
+
+ @Override
+ public ExecStartCmd.Exec createExecStartCmdExec() {
+ return getDockerCmdExecFactory().createExecStartCmdExec();
+ }
+
+ @Override
+ public InspectExecCmd.Exec createInspectExecCmdExec() {
+ return getDockerCmdExecFactory().createInspectExecCmdExec();
+ }
+
+ @Override
+ public LogContainerCmd.Exec createLogContainerCmdExec() {
+ return getDockerCmdExecFactory().createLogContainerCmdExec();
+ }
+
+ @Override
+ public CopyFileFromContainerCmd.Exec createCopyFileFromContainerCmdExec() {
+ return getDockerCmdExecFactory().createCopyFileFromContainerCmdExec();
+ }
+
+ @Override
+ public CopyArchiveFromContainerCmd.Exec createCopyArchiveFromContainerCmdExec() {
+ return getDockerCmdExecFactory().createCopyArchiveFromContainerCmdExec();
+ }
+
+ @Override
+ public CopyArchiveToContainerCmd.Exec createCopyArchiveToContainerCmdExec() {
+ return getDockerCmdExecFactory().createCopyArchiveToContainerCmdExec();
+ }
+
+ @Override
+ public StopContainerCmd.Exec createStopContainerCmdExec() {
+ return getDockerCmdExecFactory().createStopContainerCmdExec();
+ }
+
+ @Override
+ public ContainerDiffCmd.Exec createContainerDiffCmdExec() {
+ return getDockerCmdExecFactory().createContainerDiffCmdExec();
+ }
+
+ @Override
+ public ExportContainerCmd.Exec createExportContainerCmdExec() {
+ return getDockerCmdExecFactory().createExportContainerCmdExec();
+ }
+
+ @Override
+ public KillContainerCmd.Exec createKillContainerCmdExec() {
+ return getDockerCmdExecFactory().createKillContainerCmdExec();
+ }
+
+ @Override
+ public UpdateContainerCmd.Exec createUpdateContainerCmdExec() {
+ return getDockerCmdExecFactory().createUpdateContainerCmdExec();
+ }
+
+ @Override
+ public RenameContainerCmd.Exec createRenameContainerCmdExec() {
+ return getDockerCmdExecFactory().createRenameContainerCmdExec();
+ }
+
+ @Override
+ public RestartContainerCmd.Exec createRestartContainerCmdExec() {
+ return getDockerCmdExecFactory().createRestartContainerCmdExec();
+ }
+
+ @Override
+ public CommitCmd.Exec createCommitCmdExec() {
+ return getDockerCmdExecFactory().createCommitCmdExec();
+ }
+
+ @Override
+ public BuildImageCmd.Exec createBuildImageCmdExec() {
+ return getDockerCmdExecFactory().createBuildImageCmdExec();
+ }
+
+ @Override
+ public TopContainerCmd.Exec createTopContainerCmdExec() {
+ return getDockerCmdExecFactory().createTopContainerCmdExec();
+ }
+
+ @Override
+ public TagImageCmd.Exec createTagImageCmdExec() {
+ return getDockerCmdExecFactory().createTagImageCmdExec();
+ }
+
+ @Override
+ public PauseContainerCmd.Exec createPauseContainerCmdExec() {
+ return getDockerCmdExecFactory().createPauseContainerCmdExec();
+ }
+
+ @Override
+ public UnpauseContainerCmd.Exec createUnpauseContainerCmdExec() {
+ return getDockerCmdExecFactory().createUnpauseContainerCmdExec();
+ }
+
+ @Override
+ public EventsCmd.Exec createEventsCmdExec() {
+ return getDockerCmdExecFactory().createEventsCmdExec();
+ }
+
+ @Override
+ public StatsCmd.Exec createStatsCmdExec() {
+ return getDockerCmdExecFactory().createStatsCmdExec();
+ }
+
+ @Override
+ public CreateVolumeCmd.Exec createCreateVolumeCmdExec() {
+ return getDockerCmdExecFactory().createCreateVolumeCmdExec();
+ }
+
+ @Override
+ public InspectVolumeCmd.Exec createInspectVolumeCmdExec() {
+ return getDockerCmdExecFactory().createInspectVolumeCmdExec();
+ }
+
+ @Override
+ public RemoveVolumeCmd.Exec createRemoveVolumeCmdExec() {
+ return getDockerCmdExecFactory().createRemoveVolumeCmdExec();
+ }
+
+ @Override
+ public ListVolumesCmd.Exec createListVolumesCmdExec() {
+ return getDockerCmdExecFactory().createListVolumesCmdExec();
+ }
+
+ @Override
+ public ListNetworksCmd.Exec createListNetworksCmdExec() {
+ return getDockerCmdExecFactory().createListNetworksCmdExec();
+ }
+
+ @Override
+ public InspectNetworkCmd.Exec createInspectNetworkCmdExec() {
+ return getDockerCmdExecFactory().createInspectNetworkCmdExec();
+ }
+
+ @Override
+ public CreateNetworkCmd.Exec createCreateNetworkCmdExec() {
+ return getDockerCmdExecFactory().createCreateNetworkCmdExec();
+ }
+
+ @Override
+ public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() {
+ return getDockerCmdExecFactory().createRemoveNetworkCmdExec();
+ }
+
+ @Override
+ public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec() {
+ return getDockerCmdExecFactory().createConnectToNetworkCmdExec();
+ }
+
+ @Override
+ public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec() {
+ return getDockerCmdExecFactory().createDisconnectFromNetworkCmdExec();
+ }
+
+ @Override
+ public InitializeSwarmCmd.Exec createInitializeSwarmCmdExec() {
+ return getDockerCmdExecFactory().createInitializeSwarmCmdExec();
+ }
+
+ @Override
+ public InspectSwarmCmd.Exec createInspectSwarmCmdExec() {
+ return getDockerCmdExecFactory().createInspectSwarmCmdExec();
+ }
+
+ @Override
+ public JoinSwarmCmd.Exec createJoinSwarmCmdExec() {
+ return getDockerCmdExecFactory().createJoinSwarmCmdExec();
+ }
+
+ @Override
+ public LeaveSwarmCmd.Exec createLeaveSwarmCmdExec() {
+ return getDockerCmdExecFactory().createLeaveSwarmCmdExec();
+ }
+
+ @Override
+ public UpdateSwarmCmd.Exec createUpdateSwarmCmdExec() {
+ return getDockerCmdExecFactory().createUpdateSwarmCmdExec();
+ }
+
+ @Override
+ public ListServicesCmd.Exec createListServicesCmdExec() {
+ return getDockerCmdExecFactory().createListServicesCmdExec();
+ }
+
+ @Override
+ public CreateServiceCmd.Exec createCreateServiceCmdExec() {
+ return getDockerCmdExecFactory().createCreateServiceCmdExec();
+ }
+
+ @Override
+ public InspectServiceCmd.Exec createInspectServiceCmdExec() {
+ return getDockerCmdExecFactory().createInspectServiceCmdExec();
+ }
+
+ @Override
+ public UpdateServiceCmd.Exec createUpdateServiceCmdExec() {
+ return getDockerCmdExecFactory().createUpdateServiceCmdExec();
+ }
+
+ @Override
+ public RemoveServiceCmd.Exec createRemoveServiceCmdExec() {
+ return getDockerCmdExecFactory().createRemoveServiceCmdExec();
+ }
+
+ @Override
+ public LogSwarmObjectCmd.Exec logSwarmObjectExec(String endpoint) {
+ return getDockerCmdExecFactory().logSwarmObjectExec(endpoint);
+ }
+
+ @Override
+ public ListSwarmNodesCmd.Exec listSwarmNodeCmdExec() {
+ return getDockerCmdExecFactory().listSwarmNodeCmdExec();
+ }
+
+ @Override
+ public InspectSwarmNodeCmd.Exec inspectSwarmNodeCmdExec() {
+ return getDockerCmdExecFactory().inspectSwarmNodeCmdExec();
+ }
+
+ @Override
+ public RemoveSwarmNodeCmd.Exec removeSwarmNodeCmdExec() {
+ return getDockerCmdExecFactory().removeSwarmNodeCmdExec();
+ }
+
+ @Override
+ public UpdateSwarmNodeCmd.Exec updateSwarmNodeCmdExec() {
+ return getDockerCmdExecFactory().updateSwarmNodeCmdExec();
+ }
+
+ @Override
+ public ListTasksCmd.Exec listTasksCmdExec() {
+ return getDockerCmdExecFactory().listTasksCmdExec();
+ }
+
+ @Override
+ public PruneCmd.Exec pruneCmdExec() {
+ return getDockerCmdExecFactory().pruneCmdExec();
+ }
+
+ @Override
+ public ListSecretsCmd.Exec createListSecretsCmdExec() {
+ return getDockerCmdExecFactory().createListSecretsCmdExec();
+ }
+
+ @Override
+ public CreateSecretCmd.Exec createCreateSecretCmdExec() {
+ return getDockerCmdExecFactory().createCreateSecretCmdExec();
+ }
+
+ @Override
+ public RemoveSecretCmd.Exec createRemoveSecretCmdExec() {
+ return getDockerCmdExecFactory().createRemoveSecretCmdExec();
+ }
+
+ @Override
+ public ListConfigsCmd.Exec createListConfigsCmdExec() {
+ return getDockerCmdExecFactory().createListConfigsCmdExec();
+ }
+
+ @Override
+ public CreateConfigCmd.Exec createCreateConfigCmdExec() {
+ return getDockerCmdExecFactory().createCreateConfigCmdExec();
+ }
+
+ @Override
+ public InspectConfigCmd.Exec createInspectConfigCmdExec() {
+ return getDockerCmdExecFactory().createInspectConfigCmdExec();
+ }
+
+ @Override
+ public RemoveConfigCmd.Exec createRemoveConfigCmdExec() {
+ return getDockerCmdExecFactory().createRemoveConfigCmdExec();
+ }
+
+ @Override
+ public void close() throws IOException {
+ getDockerCmdExecFactory().close();
+ }
+}
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 06cf8eae0..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
@@ -21,10 +21,14 @@ public interface DockerCmdExecFactory extends Closeable {
SaveImageCmd.Exec createSaveImageCmdExec();
+ SaveImagesCmd.Exec createSaveImagesCmdExec();
+
CreateImageCmd.Exec createCreateImageCmdExec();
LoadImageCmd.Exec createLoadImageCmdExec();
+ LoadImageAsyncCmd.Exec createLoadImageAsyncCmdExec();
+
SearchImagesCmd.Exec createSearchImagesCmdExec();
RemoveImageCmd.Exec createRemoveImageCmdExec();
@@ -33,6 +37,8 @@ public interface DockerCmdExecFactory extends Closeable {
InspectImageCmd.Exec createInspectImageCmdExec();
+ ImageHistoryCmd.Exec createImageHistoryCmdExec();
+
ListContainersCmd.Exec createListContainersCmdExec();
CreateContainerCmd.Exec createCreateContainerCmdExec();
@@ -47,8 +53,12 @@ public interface DockerCmdExecFactory extends Closeable {
AttachContainerCmd.Exec createAttachContainerCmdExec();
+ ResizeContainerCmd.Exec createResizeContainerCmdExec();
+
ExecStartCmd.Exec createExecStartCmdExec();
+ ResizeExecCmd.Exec createResizeExecCmdExec();
+
InspectExecCmd.Exec createInspectExecCmdExec();
LogContainerCmd.Exec createLogContainerCmdExec();
@@ -63,6 +73,8 @@ public interface DockerCmdExecFactory extends Closeable {
ContainerDiffCmd.Exec createContainerDiffCmdExec();
+ ExportContainerCmd.Exec createExportContainerCmdExec();
+
KillContainerCmd.Exec createKillContainerCmdExec();
UpdateContainerCmd.Exec createUpdateContainerCmdExec();
@@ -230,6 +242,35 @@ public interface DockerCmdExecFactory extends Closeable {
*/
RemoveSecretCmd.Exec createRemoveSecretCmdExec();
+ /**
+ * Command to list all configs.
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ */
+ ListConfigsCmd.Exec createListConfigsCmdExec();
+
+ /**
+ * Command to inspect a config in a docker swarm. Only applicable if docker runs in swarm mode.
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ */
+ InspectConfigCmd.Exec createInspectConfigCmdExec();
+
+ /**
+ * Command to create a new config in a docker swarm. Only applicable if docker runs in swarm mode.
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ */
+ CreateConfigCmd.Exec createCreateConfigCmdExec();
+
+ /**
+ * Command to remove a config in a docker swarm. Only applicable if docker runs in swarm mode.
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ */
+ RemoveConfigCmd.Exec createRemoveConfigCmdExec();
+
+
@Override
void close() throws IOException;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/EventsCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/EventsCmd.java
index c52706226..34a0c5ad5 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/EventsCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/EventsCmd.java
@@ -2,10 +2,12 @@
import java.util.List;
import java.util.Map;
+import java.util.stream.Stream;
import javax.annotation.CheckForNull;
import com.github.dockerjava.api.model.Event;
+import com.github.dockerjava.api.model.EventType;
/**
* Get events
@@ -33,6 +35,24 @@ public interface EventsCmd extends AsyncDockerCmd {
*/
EventsCmd withEventFilter(String... event);
+ /**
+ * @param eventTypes event types to filter
+ */
+ EventsCmd withEventTypeFilter(String... eventTypes);
+
+ /**
+ * This provides a type safe version of {@link #withEventTypeFilter(String...)}.
+ *
+ * @param eventTypes event types to filter
+ */
+ default EventsCmd withEventTypeFilter(EventType... eventTypes) {
+ return withEventTypeFilter(
+ Stream.of(eventTypes)
+ .map(EventType::getValue)
+ .toArray(String[]::new)
+ );
+ }
+
/**
* @param image
* - image to filter
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java
index e751896de..449803236 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ExecCreateCmdResponse.java
@@ -1,12 +1,13 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@EqualsAndHashCode
@ToString
-public class ExecCreateCmdResponse {
+public class ExecCreateCmdResponse extends DockerObject {
@JsonProperty("Id")
private String id;
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/GraphData.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/GraphData.java
index 7852e8d59..44abc176d 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/GraphData.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/GraphData.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -12,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class GraphData {
+public class GraphData extends DockerObject {
@JsonProperty("RootDir")
private String rootDir;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/GraphDriver.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/GraphDriver.java
index 5ba4d456e..4d6679416 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/GraphDriver.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/GraphDriver.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -14,7 +15,7 @@
*/
@EqualsAndHashCode
@ToString
-public class GraphDriver {
+public class GraphDriver extends DockerObject {
/**
* @since {@link com.github.dockerjava.core.RemoteApiVersion#VERSION_1_21}
*/
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/HealthState.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/HealthState.java
index cd7290785..0d8e399c1 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/HealthState.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/HealthState.java
@@ -1,9 +1,15 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
import java.util.List;
-public class HealthState {
+@EqualsAndHashCode
+@ToString
+public class HealthState extends DockerObject {
@JsonProperty("Status")
private String status;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/HealthStateLog.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/HealthStateLog.java
index d68dcb74f..71939f872 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/HealthStateLog.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/HealthStateLog.java
@@ -1,8 +1,13 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
-public class HealthStateLog {
+@EqualsAndHashCode
+@ToString
+public class HealthStateLog extends DockerObject {
@JsonProperty("Start")
private String start;
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/InspectConfigCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectConfigCmd.java
new file mode 100644
index 000000000..96374d795
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectConfigCmd.java
@@ -0,0 +1,25 @@
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.exception.NotFoundException;
+import com.github.dockerjava.api.model.Config;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+public interface InspectConfigCmd extends SyncDockerCmd {
+
+ @CheckForNull
+ String getConfigId();
+
+ InspectConfigCmd withConfigId(@Nonnull String configId);
+
+ /**
+ * @throws NotFoundException
+ * No such config
+ */
+ @Override
+ Config 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 06e18fa21..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
@@ -3,6 +3,7 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.dockerjava.api.model.ContainerConfig;
+import com.github.dockerjava.api.model.DockerObject;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.NetworkSettings;
import com.github.dockerjava.api.model.Volume;
@@ -24,7 +25,7 @@
*/
@EqualsAndHashCode
@ToString
-public class InspectContainerResponse {
+public class InspectContainerResponse extends DockerObject {
@JsonProperty("Args")
private String[] args;
@@ -60,7 +61,10 @@ public class InspectContainerResponse {
private String id;
@JsonProperty("SizeRootFs")
- private Integer sizeRootFs;
+ private Long sizeRootFs;
+
+ @JsonProperty("SizeRw")
+ private Long sizeRw;
@JsonProperty("Image")
private String imageId;
@@ -120,10 +124,14 @@ public String getId() {
return id;
}
- public Integer getSizeRootFs() {
+ public Long getSizeRootFs() {
return sizeRootFs;
}
+ public Long getSizeRw() {
+ return sizeRw;
+ }
+
public String getCreated() {
return created;
}
@@ -251,7 +259,7 @@ public String getPlatform() {
@EqualsAndHashCode
@ToString
- public class ContainerState {
+ public class ContainerState extends DockerObject {
/**
* @since {@link RemoteApiVersion#VERSION_1_20}
@@ -456,7 +464,7 @@ public HealthState getHealth() {
@EqualsAndHashCode
@ToString
- public static class Mount {
+ public static class Mount extends DockerObject {
/**
* @since {@link RemoteApiVersion#VERSION_1_20}
@@ -581,7 +589,7 @@ public Mount withSource(String source) {
@EqualsAndHashCode
@ToString
- public class Node {
+ public class Node extends DockerObject {
@JsonProperty("ID")
private String id;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java
index 06d904dc8..307fdd873 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java
@@ -3,6 +3,7 @@
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import com.github.dockerjava.api.model.NetworkSettings;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -11,7 +12,7 @@
@EqualsAndHashCode
@ToString
-public class InspectExecResponse {
+public class InspectExecResponse extends DockerObject {
@JsonProperty("ID")
private String id;
@@ -152,7 +153,7 @@ public Long getPidLong() {
@EqualsAndHashCode
@ToString
- public class ProcessConfig {
+ public class ProcessConfig extends DockerObject {
@JsonProperty("arguments")
private List arguments;
@@ -190,7 +191,9 @@ public String getUser() {
}
}
- public class Container {
+ @EqualsAndHashCode
+ @ToString
+ public class Container extends DockerObject {
@JsonProperty("NetworkSettings")
private NetworkSettings networkSettings;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectImageResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectImageResponse.java
index b8590bfc6..bf48ba8f0 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectImageResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectImageResponse.java
@@ -2,6 +2,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.dockerjava.api.model.ContainerConfig;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -15,7 +16,7 @@
*/
@EqualsAndHashCode
@ToString
-public class InspectImageResponse {
+public class InspectImageResponse extends DockerObject {
@JsonProperty("Architecture")
private String arch;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectVolumeResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectVolumeResponse.java
index 020e0f9ae..bc0008817 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectVolumeResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/InspectVolumeResponse.java
@@ -1,30 +1,43 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
+import java.util.Map;
+
/**
*
* @author Marcus Linke
*/
@EqualsAndHashCode
@ToString
-public class InspectVolumeResponse {
+public class InspectVolumeResponse extends DockerObject {
@JsonProperty("Name")
private String name;
+ @JsonProperty("Labels")
+ private Map labels;
+
@JsonProperty("Driver")
private String driver;
@JsonProperty("Mountpoint")
private String mountpoint;
+ @JsonProperty("Options")
+ private Map options;
+
public String getName() {
return name;
}
+ public Map getLabels() {
+ return labels;
+ }
+
public String getDriver() {
return driver;
}
@@ -32,4 +45,9 @@ public String getDriver() {
public String getMountpoint() {
return mountpoint;
}
+
+ public Map getOptions() {
+ return options;
+ }
+
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListConfigsCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListConfigsCmd.java
new file mode 100644
index 000000000..38d34816a
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListConfigsCmd.java
@@ -0,0 +1,21 @@
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.model.Config;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Command to list all configs in a docker swarm. Only applicable if docker runs in swarm mode.
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ */
+public interface ListConfigsCmd extends SyncDockerCmd> {
+
+ Map> getFilters();
+
+ ListConfigsCmd withFilters(Map> filters);
+
+ interface Exec extends DockerCmdSyncExec> {
+ }
+}
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 7741df743..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
@@ -1,5 +1,6 @@
package com.github.dockerjava.api.command;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -25,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);
/**
@@ -44,6 +50,15 @@ public interface ListImagesCmd extends SyncDockerCmd> {
*/
ListImagesCmd withLabelFilter(Map labels);
+ /**
+ * Filter images by reference
+ *
+ * @param reference string in the form {@code [:]}
+ */
+ ListImagesCmd withReferenceFilter(String reference);
+
+ ListImagesCmd withFilter(String key, Collection values);
+
interface Exec extends DockerCmdSyncExec> {
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListVolumesResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListVolumesResponse.java
index 4e1b449f8..7c434a48d 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListVolumesResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ListVolumesResponse.java
@@ -3,6 +3,7 @@
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -12,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ListVolumesResponse {
+public class ListVolumesResponse extends DockerObject {
@JsonProperty("Volumes")
private List volumes;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/LoadImageAsyncCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/LoadImageAsyncCmd.java
new file mode 100644
index 000000000..4f054db22
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/LoadImageAsyncCmd.java
@@ -0,0 +1,22 @@
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.model.LoadResponseItem;
+
+import java.io.InputStream;
+
+public interface LoadImageAsyncCmd extends AsyncDockerCmd {
+ InputStream getImageStream();
+
+ /**
+ * @param imageStream the InputStream of the tar file
+ */
+ LoadImageAsyncCmd withImageStream(InputStream imageStream);
+
+ @Override
+ default LoadImageCallback start() {
+ return exec(new LoadImageCallback());
+ }
+
+ interface Exec extends DockerCmdAsyncExec {
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/LoadImageCallback.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/LoadImageCallback.java
new file mode 100644
index 000000000..80cca18de
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/LoadImageCallback.java
@@ -0,0 +1,49 @@
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.async.ResultCallbackTemplate;
+import com.github.dockerjava.api.exception.DockerClientException;
+import com.github.dockerjava.api.model.LoadResponseItem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LoadImageCallback extends ResultCallbackTemplate {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(LoadImageCallback.class);
+
+ private String message;
+
+ private String error;
+
+ @Override
+ public void onNext(LoadResponseItem item) {
+ if (item.isBuildSuccessIndicated()) {
+ this.message = item.getMessage();
+ } else if (item.isErrorIndicated()) {
+ this.error = item.getError();
+ }
+
+ LOGGER.debug("{}", item);
+ }
+
+ public String awaitMessage() {
+ try {
+ awaitCompletion();
+ } catch (InterruptedException e) {
+ throw new DockerClientException("", e);
+ }
+
+ return getMessage();
+ }
+
+ private String getMessage() {
+ if (this.message != null) {
+ return this.message;
+ }
+
+ if (this.error == null) {
+ throw new DockerClientException("Could not build image");
+ }
+
+ throw new DockerClientException("Could not build image: " + this.error);
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java
index 53674cbaa..29c4516cd 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/LogContainerCmd.java
@@ -25,6 +25,8 @@
* @param since
* - UNIX timestamp (integer) to filter logs. Specifying a timestamp will only output log-entries since that timestamp. Default:
* 0 (unfiltered)
+ * @param until
+ * - Only return logs before this time, as a UNIX timestamp. Default: 0
*/
public interface LogContainerCmd extends AsyncDockerCmd {
@@ -49,6 +51,9 @@ public interface LogContainerCmd extends AsyncDockerCmd
@CheckForNull
Integer getSince();
+ @CheckForNull
+ Integer getUntil();
+
LogContainerCmd withContainerId(@Nonnull String containerId);
/**
@@ -69,6 +74,8 @@ public interface LogContainerCmd extends AsyncDockerCmd
LogContainerCmd withSince(Integer since);
+ LogContainerCmd withUntil(Integer until);
+
/**
* @throws com.github.dockerjava.api.NotFoundException
* No such container
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/PullImageCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/PullImageCmd.java
index cc95161a5..d86bddfe3 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/PullImageCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/PullImageCmd.java
@@ -1,5 +1,6 @@
package com.github.dockerjava.api.command;
+import com.github.dockerjava.api.async.ResultCallback;
import com.github.dockerjava.api.model.AuthConfig;
import com.github.dockerjava.api.model.PullResponseItem;
@@ -41,6 +42,11 @@ public interface PullImageCmd extends AsyncDockerCmd start() {
+ return exec(new PullImageResultCallback());
+ }
+
interface Exec extends DockerCmdAsyncExec {
}
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/PullImageResultCallback.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/PullImageResultCallback.java
new file mode 100644
index 000000000..5980ce3df
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/PullImageResultCallback.java
@@ -0,0 +1,115 @@
+/*
+ * Created on 21.07.2015
+ */
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.async.ResultCallback;
+import com.github.dockerjava.api.exception.DockerClientException;
+import com.github.dockerjava.api.model.PullResponseItem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.CheckForNull;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author Marcus Linke
+ *
+ */
+public class PullImageResultCallback extends ResultCallback.Adapter {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PullImageResultCallback.class);
+
+ private boolean isSwarm = false;
+ private Map results = null;
+
+ @CheckForNull
+ private PullResponseItem latestItem = null;
+
+ @Override
+ public void onNext(PullResponseItem item) {
+ // only do it once
+ if (results == null && latestItem == null) {
+ checkForDockerSwarmResponse(item);
+ }
+
+ if (isSwarm) {
+ handleDockerSwarmResponse(item);
+ } else {
+ handleDockerClientResponse(item);
+ }
+
+ LOGGER.debug("{}", item);
+ }
+
+ private void checkForDockerSwarmResponse(PullResponseItem item) {
+ if (item.getStatus().matches("Pulling\\s.+\\.{3}$")) {
+ isSwarm = true;
+ LOGGER.debug("Communicating with Docker Swarm.");
+ }
+ }
+
+ private void handleDockerSwarmResponse(final PullResponseItem item) {
+ if (results == null) {
+ results = new HashMap<>();
+ }
+
+ // Swarm terminates a pull sometimes with an empty line.
+ // Therefore keep first success message
+ PullResponseItem currentItem = results.get(item.getId());
+ if (currentItem == null || !currentItem.isPullSuccessIndicated()) {
+ results.put(item.getId(), item);
+ }
+ }
+
+ private void handleDockerClientResponse(PullResponseItem item) {
+ latestItem = item;
+ }
+
+ private void checkDockerSwarmPullSuccessful() {
+ if (results.isEmpty()) {
+ throw new DockerClientException("Could not pull image through Docker Swarm");
+ } else {
+ boolean pullFailed = false;
+ StringBuilder sb = new StringBuilder();
+
+ for (PullResponseItem pullResponseItem : results.values()) {
+ if (!pullResponseItem.isPullSuccessIndicated()) {
+ pullFailed = true;
+ sb.append("[" + pullResponseItem.getId() + ":" + messageFromPullResult(pullResponseItem) + "]");
+ }
+ }
+
+ if (pullFailed) {
+ throw new DockerClientException("Could not pull image: " + sb.toString());
+ }
+ }
+ }
+
+ private void checkDockerClientPullSuccessful() {
+ if (latestItem == null) {
+ return;
+ }
+
+ if (!latestItem.isPullSuccessIndicated()) {
+ throw new DockerClientException("Could not pull image: " + messageFromPullResult(latestItem));
+ }
+ }
+
+ private String messageFromPullResult(PullResponseItem pullResponseItem) {
+ return (pullResponseItem.getError() != null) ? pullResponseItem.getError() : pullResponseItem.getStatus();
+ }
+
+ @Override
+ protected void throwFirstError() {
+ super.throwFirstError();
+
+ if (isSwarm) {
+ checkDockerSwarmPullSuccessful();
+ } else {
+ checkDockerClientPullSuccessful();
+ }
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/PushImageCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/PushImageCmd.java
index abd86c53c..01f9d0567 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/PushImageCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/PushImageCmd.java
@@ -2,8 +2,10 @@
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.DockerClientException;
import com.github.dockerjava.api.exception.NotFoundException;
import com.github.dockerjava.api.model.AuthConfig;
import com.github.dockerjava.api.model.PushResponseItem;
@@ -46,6 +48,31 @@ public interface PushImageCmd extends AsyncDockerCmd> T exec(T resultCallback);
+ @Override
+ default ResultCallback.Adapter start() {
+ return exec(new ResultCallback.Adapter() {
+
+ @Nullable
+ private PushResponseItem latestItem = null;
+
+ @Override
+ public void onNext(PushResponseItem item) {
+ this.latestItem = item;
+ }
+
+ @Override
+ protected void throwFirstError() {
+ super.throwFirstError();
+
+ if (latestItem == null) {
+ throw new DockerClientException("Could not push image");
+ } else if (latestItem.isErrorIndicated()) {
+ throw new DockerClientException("Could not push image: " + latestItem.getError());
+ }
+ }
+ });
+ }
+
interface Exec extends DockerCmdAsyncExec {
}
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/RemoveConfigCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/RemoveConfigCmd.java
new file mode 100644
index 000000000..741fe32c0
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/RemoveConfigCmd.java
@@ -0,0 +1,28 @@
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.exception.NotFoundException;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+/**
+ * Remove a config.
+ */
+public interface RemoveConfigCmd extends SyncDockerCmd {
+
+ @CheckForNull
+ String getConfigId();
+
+ RemoveConfigCmd withConfigId(@Nonnull String secretId);
+
+ /**
+ * @throws NotFoundException
+ * No such config
+ */
+ @Override
+ Void exec() throws NotFoundException;
+
+ interface Exec extends DockerCmdSyncExec {
+ }
+
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/RemoveSwarmNodeCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/RemoveSwarmNodeCmd.java
index 198e7b8df..603c610b3 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/RemoveSwarmNodeCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/RemoveSwarmNodeCmd.java
@@ -18,7 +18,7 @@ public interface RemoveSwarmNodeCmd extends SyncDockerCmd {
@CheckForNull
Boolean hasForceEnabled();
- RemoveSwarmNodeCmd withContainerId(@Nonnull String containerId);
+ RemoveSwarmNodeCmd withSwarmNodeId(@Nonnull String swarmNodeId);
RemoveSwarmNodeCmd withForce(Boolean force);
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ResizeContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ResizeContainerCmd.java
new file mode 100644
index 000000000..fef0087ed
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ResizeContainerCmd.java
@@ -0,0 +1,30 @@
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.exception.NotFoundException;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+public interface ResizeContainerCmd extends SyncDockerCmd {
+
+ @CheckForNull
+ String getContainerId();
+
+ Integer getHeight();
+
+ Integer getWidth();
+
+ ResizeContainerCmd withContainerId(@Nonnull String execId);
+
+ ResizeContainerCmd withSize(int height, int width);
+
+ /**
+ * @throws NotFoundException no such container instance
+ */
+ @Override
+ Void exec() throws NotFoundException;
+
+ interface Exec extends DockerCmdSyncExec {
+ }
+
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/ResizeExecCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ResizeExecCmd.java
new file mode 100644
index 000000000..5910705e0
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/ResizeExecCmd.java
@@ -0,0 +1,29 @@
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.exception.NotFoundException;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+public interface ResizeExecCmd extends SyncDockerCmd {
+ @CheckForNull
+ String getExecId();
+
+ Integer getHeight();
+
+ Integer getWidth();
+
+ ResizeExecCmd withExecId(@Nonnull String execId);
+
+ ResizeExecCmd withSize(int height, int width);
+
+ /**
+ * @throws NotFoundException no such exec instance
+ */
+ @Override
+ Void exec() throws NotFoundException;
+
+ interface Exec extends DockerCmdSyncExec {
+ }
+
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/RestartContainerCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/RestartContainerCmd.java
index 5dcc59c24..372456813 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/RestartContainerCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/RestartContainerCmd.java
@@ -8,9 +8,8 @@
/**
* Restart a running container.
*
- * @param timeout
- * - Timeout in seconds before killing the container. Defaults to 10 seconds.
- *
+ * @param signal - Signal to send to the container as an integer or string (e.g. SIGINT).
+ * @param timeout - Timeout in seconds before killing the container. Defaults to 10 seconds.
*/
public interface RestartContainerCmd extends SyncDockerCmd {
@@ -20,13 +19,28 @@ public interface RestartContainerCmd extends SyncDockerCmd {
@CheckForNull
Integer getTimeout();
+ /**
+ * @since {@link com.github.dockerjava.core.RemoteApiVersion#VERSION_1_42}
+ */
+ @CheckForNull
+ String getSignal();
+
RestartContainerCmd withContainerId(@Nonnull String containerId);
- RestartContainerCmd withtTimeout(Integer timeout);
+ /**
+ * @deprecated wrong name, use {@link #withTimeout(Integer)}
+ */
+ @Deprecated
+ default RestartContainerCmd withtTimeout(Integer timeout) {
+ return withTimeout(timeout);
+ }
+
+ RestartContainerCmd withTimeout(Integer timeout);
+
+ RestartContainerCmd withSignal(String signal);
/**
- * @throws NotFoundException
- * No such container
+ * @throws NotFoundException No such container
*/
@Override
Void exec() throws NotFoundException;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/RootFS.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/RootFS.java
index e4cc0ec54..c190852af 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/RootFS.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/RootFS.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -14,7 +15,7 @@
*/
@EqualsAndHashCode
@ToString
-public class RootFS {
+public class RootFS extends DockerObject {
@JsonProperty("Type")
private String type;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/SaveImagesCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/SaveImagesCmd.java
new file mode 100644
index 000000000..1dd504434
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/SaveImagesCmd.java
@@ -0,0 +1,47 @@
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.exception.NotFoundException;
+
+import javax.annotation.Nonnull;
+import java.io.InputStream;
+import java.util.List;
+
+/** Command for downloading multiple images at once. */
+public interface SaveImagesCmd extends SyncDockerCmd {
+
+ /** Image name and tag. */
+ interface TaggedImage {
+
+ /**
+ * The (tagged) image name.
+ * @return "name:tag" if a tag was specified, otherwise "name"
+ */
+ String asString();
+ }
+
+ /**
+ * Adds an image to the list of images to download.
+ * @param name image name (not null)
+ * @param tag tag
+ * @return this
+ */
+ SaveImagesCmd withImage(@Nonnull String name, @Nonnull String tag);
+
+
+ /**
+ * Gets the images that were added by {@link #withImage(String, String)}.
+ * @return images to be downloaded
+ */
+ List getImages();
+
+ /**
+ * Its the responsibility of the caller to consume and/or close the {@link InputStream} to prevent connection leaks.
+ *
+ * @throws NotFoundException no such image
+ */
+ InputStream exec() throws NotFoundException;
+
+ interface Exec extends DockerCmdSyncExec {
+ }
+
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/SearchImagesCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/SearchImagesCmd.java
index 2bc87cc73..8dc38ee3e 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/SearchImagesCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/SearchImagesCmd.java
@@ -18,8 +18,10 @@ public interface SearchImagesCmd extends SyncDockerCmd> {
@CheckForNull
String getTerm();
+ Integer getLimit();
SearchImagesCmd withTerm(@Nonnull String term);
+ SearchImagesCmd withLimit(@Nonnull Integer limit);
interface Exec extends DockerCmdSyncExec> {
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/StatsCmd.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/StatsCmd.java
index 6085a810b..c85ca2b2f 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/StatsCmd.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/StatsCmd.java
@@ -16,6 +16,11 @@ public interface StatsCmd extends AsyncDockerCmd {
StatsCmd withContainerId(@Nonnull String containerId);
+ @CheckForNull
+ Boolean hasNoStream();
+
+ StatsCmd withNoStream(boolean noStream);
+
interface Exec extends DockerCmdAsyncExec {
}
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/TopContainerResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/TopContainerResponse.java
index 6f7b1d49f..e604c20ae 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/command/TopContainerResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/TopContainerResponse.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.command;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.dockerjava.api.model.DockerObject;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@@ -11,7 +12,7 @@
*/
@EqualsAndHashCode
@ToString
-public class TopContainerResponse {
+public class TopContainerResponse extends DockerObject {
@JsonProperty("Titles")
private String[] titles;
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 daa4e5d3c..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,12 +22,29 @@ public interface WaitContainerCmd extends AsyncDockerCmd> T exec(T resultCallback);
+ @Override
+ default WaitContainerResultCallback start() {
+ return exec(new WaitContainerResultCallback());
+ }
+
interface Exec extends DockerCmdAsyncExec {
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/command/WaitContainerResultCallback.java b/docker-java-api/src/main/java/com/github/dockerjava/api/command/WaitContainerResultCallback.java
new file mode 100644
index 000000000..6cb160151
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/command/WaitContainerResultCallback.java
@@ -0,0 +1,74 @@
+/*
+ * Created on 21.07.2015
+ */
+package com.github.dockerjava.api.command;
+
+import com.github.dockerjava.api.async.ResultCallbackTemplate;
+import com.github.dockerjava.api.exception.DockerClientException;
+import com.github.dockerjava.api.model.WaitResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.CheckForNull;
+import java.util.concurrent.TimeUnit;
+
+/**
+ *
+ * @author Marcus Linke
+ *
+ */
+public class WaitContainerResultCallback extends ResultCallbackTemplate {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(WaitContainerResultCallback.class);
+
+ @CheckForNull
+ private WaitResponse waitResponse = null;
+
+ @Override
+ public void onNext(WaitResponse waitResponse) {
+ this.waitResponse = waitResponse;
+ LOGGER.debug("{}", waitResponse);
+ }
+
+ /**
+ * Awaits the status code from the container.
+ *
+ * @throws DockerClientException
+ * if the wait operation fails.
+ */
+ public Integer awaitStatusCode() {
+ try {
+ awaitCompletion();
+ } catch (InterruptedException e) {
+ throw new DockerClientException("", e);
+ }
+
+ return getStatusCode();
+ }
+
+ /**
+ * Awaits the status code from the container.
+ *
+ * @throws DockerClientException
+ * if the wait operation fails.
+ */
+ public Integer awaitStatusCode(long timeout, TimeUnit timeUnit) {
+ try {
+ if (!awaitCompletion(timeout, timeUnit)) {
+ throw new DockerClientException("Awaiting status code timeout.");
+ }
+ } catch (InterruptedException e) {
+ throw new DockerClientException("Awaiting status code interrupted: ", e);
+ }
+
+ return getStatusCode();
+ }
+
+ private Integer getStatusCode() {
+ if (waitResponse == null) {
+ throw new DockerClientException("Error while wait container");
+ } else {
+ return waitResponse.getStatusCode();
+ }
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/exception/DockerException.java b/docker-java-api/src/main/java/com/github/dockerjava/api/exception/DockerException.java
index 5b511ff96..69baf047e 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/exception/DockerException.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/exception/DockerException.java
@@ -13,12 +13,13 @@ public class DockerException extends RuntimeException {
private int httpStatus = 0;
public DockerException(String message, int httpStatus) {
- super(message);
+ super(String.format("Status %d: %s", httpStatus, message));
this.httpStatus = httpStatus;
}
public DockerException(String message, int httpStatus, Throwable cause) {
- super(message, cause);
+ super(String.format("Status %d: %s", httpStatus, message), cause);
+ this.httpStatus = httpStatus;
}
public int getHttpStatus() {
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthConfig.java
index 1b6a01ea1..cbb108571 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthConfig.java
@@ -8,8 +8,8 @@
import java.io.Serializable;
@EqualsAndHashCode
-@ToString
-public class AuthConfig implements Serializable {
+@ToString(onlyExplicitlyIncluded = true)
+public class AuthConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
@@ -20,15 +20,18 @@ public class AuthConfig implements Serializable {
public static final String DEFAULT_SERVER_ADDRESS = "https://index.docker.io/v1/";
@JsonProperty("username")
+ @ToString.Include
private String username;
@JsonProperty("password")
private String password;
@JsonProperty("email")
+ @ToString.Include
private String email;
@JsonProperty("serveraddress")
+ @ToString.Include
private String registryAddress = DEFAULT_SERVER_ADDRESS;
@JsonProperty("auth")
@@ -50,6 +53,7 @@ public class AuthConfig implements Serializable {
* @since {@link com.github.dockerjava.core.RemoteApiVersion#VERSION_1_25}
*/
@JsonProperty("stackOrchestrator")
+ @ToString.Include
private String stackOrchestrator;
public String getUsername() {
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthConfigurations.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthConfigurations.java
index baa8fc0b4..cbb7240f4 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthConfigurations.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthConfigurations.java
@@ -5,8 +5,12 @@
import java.util.TreeMap;
import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
-public class AuthConfigurations implements Serializable {
+@EqualsAndHashCode
+@ToString
+public class AuthConfigurations extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("configs")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthResponse.java
index 89069fe54..0703cab68 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/AuthResponse.java
@@ -1,18 +1,23 @@
package com.github.dockerjava.api.model;
import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import java.io.Serializable;
-public class AuthResponse implements Serializable {
+@EqualsAndHashCode
+@ToString(onlyExplicitlyIncluded = true)
+public class AuthResponse extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
* @since 1.23
*/
@JsonProperty("Status")
+ @ToString.Include
private String status;
/**
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 c9aecf9d4..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
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.model;
import lombok.EqualsAndHashCode;
+import lombok.ToString;
import java.io.Serializable;
@@ -9,7 +10,8 @@
* The Bind can be in read only or read write access mode.
*/
@EqualsAndHashCode
-public class Bind implements Serializable {
+@ToString
+public class Bind extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
private String path;
@@ -97,7 +99,8 @@ public PropagationMode getPropagationMode() {
*/
public static Bind parse(String serialized) {
try {
- String[] parts = serialized.split(":");
+ // Split by ':' but not ':\' (Windows-style path)
+ String[] parts = serialized.split(":(?!\\\\)");
switch (parts.length) {
case 2: {
return new Bind(parts[0], new Volume(parts[1]));
@@ -115,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/BindOptions.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BindOptions.java
index 340921f01..801e7719a 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BindOptions.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BindOptions.java
@@ -11,7 +11,7 @@
*/
@EqualsAndHashCode
@ToString
-public class BindOptions implements Serializable {
+public class BindOptions extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Binds.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Binds.java
index a7957a945..06aff4ecf 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Binds.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Binds.java
@@ -1,25 +1,11 @@
package com.github.dockerjava.api.model;
-import java.io.IOException;
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.util.stream.Stream;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
-@JsonSerialize(using = Binds.Serializer.class)
-@JsonDeserialize(using = Binds.Deserializer.class)
public class Binds implements Serializable {
private static final long serialVersionUID = 1L;
@@ -33,39 +19,16 @@ public Bind[] getBinds() {
return binds;
}
- public static class Serializer extends JsonSerializer {
-
- @Override
- public void serialize(Binds binds, JsonGenerator jsonGen, SerializerProvider serProvider) throws IOException,
- JsonProcessingException {
-
- //
- jsonGen.writeStartArray();
- for (Bind bind : binds.getBinds()) {
- jsonGen.writeString(bind.toString());
- }
- jsonGen.writeEndArray();
- //
- }
-
+ @JsonValue
+ public String[] toPrimitive() {
+ return Stream.of(binds).map(Bind::toString).toArray(String[]::new);
}
- public static class Deserializer extends JsonDeserializer {
- @Override
- public Binds deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
- throws IOException, JsonProcessingException {
-
- List binds = new ArrayList<>();
- ObjectCodec oc = jsonParser.getCodec();
- JsonNode node = oc.readTree(jsonParser);
- for (Iterator it = node.elements(); it.hasNext();) {
-
- JsonNode field = it.next();
- binds.add(Bind.parse(field.asText()));
-
- }
- return new Binds(binds.toArray(new Bind[0]));
- }
+ @JsonCreator
+ public static Binds fromPrimitive(String[] binds) {
+ return new Binds(
+ Stream.of(binds).map(Bind::parse).toArray(Bind[]::new)
+ );
}
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioRateDevice.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioRateDevice.java
index e26fc0d6f..300bcbf24 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioRateDevice.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioRateDevice.java
@@ -8,7 +8,7 @@
@EqualsAndHashCode
@ToString
-public class BlkioRateDevice implements Serializable {
+public class BlkioRateDevice extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
@JsonProperty("Path")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioStatEntry.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioStatEntry.java
index d47b2fe42..2fccabaa2 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioStatEntry.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioStatEntry.java
@@ -12,7 +12,7 @@
*/
@EqualsAndHashCode
@ToString
-public class BlkioStatEntry implements Serializable {
+public class BlkioStatEntry extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("major")
Long major;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioStatsConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioStatsConfig.java
index 55479d024..5a7db4d8b 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioStatsConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioStatsConfig.java
@@ -15,7 +15,7 @@
*/
@EqualsAndHashCode
@ToString
-public class BlkioStatsConfig implements Serializable {
+public class BlkioStatsConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("io_service_bytes_recursive")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioWeightDevice.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioWeightDevice.java
index 24b4d87f5..3fd9704d8 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioWeightDevice.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BlkioWeightDevice.java
@@ -8,7 +8,7 @@
@EqualsAndHashCode
@ToString
-public class BlkioWeightDevice implements Serializable {
+public class BlkioWeightDevice extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
@JsonProperty("Path")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BuildResponseItem.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BuildResponseItem.java
index b781bac9f..80356e55c 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/BuildResponseItem.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/BuildResponseItem.java
@@ -1,14 +1,19 @@
package com.github.dockerjava.api.model;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
/**
* Represents a build response stream item
*/
+@EqualsAndHashCode
+@ToString
public class BuildResponseItem extends ResponseItem {
private static final long serialVersionUID = -1252904184236343612L;
private static final String BUILD_SUCCESS = "Successfully built";
+ private static final String SHA256 = "sha256:";
/**
* Returns whether the stream field indicates a successful build operation
@@ -19,7 +24,7 @@ public boolean isBuildSuccessIndicated() {
return false;
}
- return getStream().contains(BUILD_SUCCESS);
+ return getStream().contains(BUILD_SUCCESS) || getStream().startsWith(SHA256);
}
@JsonIgnore
@@ -28,6 +33,10 @@ public String getImageId() {
return null;
}
+ if (getStream().startsWith(SHA256)) {
+ return getStream().replaceFirst(SHA256, "").trim();
+ }
+
return getStream().replaceFirst(BUILD_SUCCESS, "").trim();
}
}
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 6237a65ae..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.
*
@@ -18,6 +20,10 @@ public enum Capability {
*
*/
AUDIT_CONTROL,
+ /**
+ * Allow reading the audit log via multicast netlink socket.
+ */
+ AUDIT_READ,
/**
* Write records to kernel auditing log.
*/
@@ -26,6 +32,14 @@ public enum Capability {
* Employ features that can block system suspend.
*/
BLOCK_SUSPEND,
+ /**
+ * Allow creating BPF maps, loading BPF Type Format (BTF) data, retrieve JITed code of BPF programs, and more.
+ */
+ BPF,
+ /**
+ * Allow checkpoint/restore related operations. Introduced in kernel 5.9.
+ */
+ CHECKPOINT_RESTORE,
/**
* Make arbitrary changes to file UIDs and GIDs (see chown(2)).
*/
@@ -120,6 +134,10 @@ public enum Capability {
*
*/
NET_RAW,
+ /**
+ * Allow system performance and observability privileged operations using perf_events, i915_perf and other kernel subsystems
+ */
+ PERFMON,
/**
* Set file capabilities.
*/
@@ -283,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/ChangeLog.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ChangeLog.java
index 922e2e2b3..c8a5be890 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ChangeLog.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ChangeLog.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ChangeLog implements Serializable {
+public class ChangeLog extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Path")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ClusterInfo.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ClusterInfo.java
index 40055106b..b6e1e5566 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ClusterInfo.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ClusterInfo.java
@@ -16,7 +16,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ClusterInfo implements Serializable {
+public class ClusterInfo extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Config.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Config.java
new file mode 100644
index 000000000..2c5b87aa8
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Config.java
@@ -0,0 +1,90 @@
+package com.github.dockerjava.api.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Used for Listing config.
+ *
+ * @since {@link RemoteApiVersion#VERSION_1_30}
+ */
+@ToString
+@EqualsAndHashCode
+public class Config extends DockerObject implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * @since 1.30
+ */
+ @JsonProperty("ID")
+ private String id;
+
+ /**
+ * @since 1.30
+ */
+ @JsonProperty("CreatedAt")
+ private Date createdAt;
+
+ /**
+ * @since 1.30
+ */
+ @JsonProperty("UpdatedAt")
+ private Date updatedAt;
+
+ /**
+ * @since 1.30
+ */
+ @JsonProperty("Spec")
+ private ConfigSpec spec;
+
+ /**
+ * @since 1.30
+ */
+ @JsonProperty("Version")
+ private ResourceVersion version;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public Date getCreatedAt() {
+ return createdAt;
+ }
+
+ public void setCreatedAt(Date createdAt) {
+ this.createdAt = createdAt;
+ }
+
+ public Date getUpdatedAt() {
+ return updatedAt;
+ }
+
+ public void setUpdatedAt(Date updatedAt) {
+ this.updatedAt = updatedAt;
+ }
+
+ public ConfigSpec getSpec() {
+ return spec;
+ }
+
+ public void setSpec(ConfigSpec spec) {
+ this.spec = spec;
+ }
+
+ public ResourceVersion getVersion() {
+ return version;
+ }
+
+ public void setVersion(ResourceVersion version) {
+ this.version = version;
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ConfigSpec.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ConfigSpec.java
new file mode 100644
index 000000000..62e525d0b
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ConfigSpec.java
@@ -0,0 +1,24 @@
+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_30}
+ */
+@EqualsAndHashCode
+@ToString
+public class ConfigSpec extends DockerObject implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @JsonProperty("Name")
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Container.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Container.java
index e2723a96b..3b4bdf394 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Container.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Container.java
@@ -17,7 +17,7 @@
*/
@EqualsAndHashCode
@ToString
-public class Container implements Serializable {
+public class Container extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Command")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerConfig.java
index a84835277..db5437220 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerConfig.java
@@ -16,7 +16,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerConfig implements Serializable {
+public class ContainerConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("AttachStderr")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerDNSConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerDNSConfig.java
index c60414f81..63d3cae11 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerDNSConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerDNSConfig.java
@@ -14,7 +14,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerDNSConfig implements Serializable {
+public class ContainerDNSConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Nameservers")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerHostConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerHostConfig.java
index 590d22a92..cdc446282 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerHostConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerHostConfig.java
@@ -14,7 +14,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerHostConfig implements Serializable {
+public class ContainerHostConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("NetworkMode")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerMount.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerMount.java
index 48b4c9f47..a08a6ea3f 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerMount.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerMount.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerMount implements Serializable {
+public class ContainerMount extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Name")
@@ -106,7 +106,7 @@ public ContainerMount withDriver(String driver) {
*/
@CheckForNull
public String getMode() {
- return driver;
+ return mode;
}
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerNetwork.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerNetwork.java
index 52acf4c77..823828900 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerNetwork.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerNetwork.java
@@ -20,7 +20,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerNetwork implements Serializable {
+public class ContainerNetwork extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
@@ -283,7 +283,10 @@ public ContainerNetwork withNetworkID(String networkID) {
/**
* Docker named it EndpointIPAMConfig
*/
- public static class Ipam {
+ @EqualsAndHashCode
+ @ToString
+ public static class Ipam extends DockerObject implements Serializable {
+ private static final long serialVersionUID = 1L;
@JsonProperty("IPv4Address")
private String ipv4Address;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerNetworkSettings.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerNetworkSettings.java
index 19e249e29..9e8381500 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerNetworkSettings.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerNetworkSettings.java
@@ -15,7 +15,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerNetworkSettings implements Serializable {
+public class ContainerNetworkSettings extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerPort.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerPort.java
index b22aecc0e..35f9f6ab9 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerPort.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerPort.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerPort implements Serializable {
+public class ContainerPort extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("IP")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpec.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpec.java
index f56399ce8..0a26e54fd 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpec.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpec.java
@@ -16,7 +16,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerSpec implements Serializable {
+public class ContainerSpec extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
/**
@@ -137,7 +137,7 @@ public class ContainerSpec implements Serializable {
* @since 1.26
* A test to perform to check that the container is healthy.
*/
- @JsonProperty("HealthCheck")
+ @JsonProperty("Healthcheck")
private HealthCheck healthCheck;
/**
@@ -161,6 +161,14 @@ public class ContainerSpec implements Serializable {
@JsonProperty("Configs")
private List configs;
+ /**
+ * @since 1.38
+ * Run an init inside the container that forwards signals and reaps processes.
+ * This field is omitted if empty, and the default (as configured on the daemon) is used.
+ */
+ @JsonProperty("Init")
+ private Boolean init;
+
/**
* @see #image
*/
@@ -435,4 +443,13 @@ public ContainerSpec withConfigs(List configs) {
this.configs = configs;
return this;
}
+
+ public Boolean getInit() {
+ return init;
+ }
+
+ public ContainerSpec withInit(Boolean init) {
+ this.init = init;
+ return this;
+ }
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecConfig.java
index 274ad8f55..fbd93b606 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecConfig.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerSpecConfig implements Serializable {
+public class ContainerSpecConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("File")
private ContainerSpecFile file;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecFile.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecFile.java
index cf8471d7c..ac9ef4d81 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecFile.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecFile.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerSpecFile implements Serializable {
+public class ContainerSpecFile extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Name")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivileges.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivileges.java
index a5bb69391..5d8d7cd55 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivileges.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivileges.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerSpecPrivileges implements Serializable {
+public class ContainerSpecPrivileges extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("CredentialSpec")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivilegesCredential.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivilegesCredential.java
index 8a4294f01..e6ca62fd4 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivilegesCredential.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivilegesCredential.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerSpecPrivilegesCredential implements Serializable {
+public class ContainerSpecPrivilegesCredential extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivilegesSELinuxContext.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivilegesSELinuxContext.java
index c7fa68af8..d1b2cc15b 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivilegesSELinuxContext.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecPrivilegesSELinuxContext.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerSpecPrivilegesSELinuxContext implements Serializable {
+public class ContainerSpecPrivilegesSELinuxContext extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Disable")
private Boolean disable;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecSecret.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecSecret.java
index e92b2b07f..742272e16 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecSecret.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ContainerSpecSecret.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ContainerSpecSecret implements Serializable {
+public class ContainerSpecSecret extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("File")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/CpuStatsConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/CpuStatsConfig.java
index fce6e610d..04d91c826 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/CpuStatsConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/CpuStatsConfig.java
@@ -1,6 +1,8 @@
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;
@@ -10,7 +12,9 @@
*
* @author Yuting Liu
*/
-public class CpuStatsConfig implements Serializable {
+@EqualsAndHashCode
+@ToString
+public class CpuStatsConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("cpu_usage")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/CpuUsageConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/CpuUsageConfig.java
index e9e4d2212..f87afeec8 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/CpuUsageConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/CpuUsageConfig.java
@@ -1,6 +1,8 @@
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;
@@ -11,7 +13,9 @@
*
* @author Yuting Liu
*/
-public class CpuUsageConfig implements Serializable {
+@EqualsAndHashCode
+@ToString
+public class CpuUsageConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("total_usage")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Device.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Device.java
index 09223e52a..b6f16029e 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Device.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Device.java
@@ -14,7 +14,7 @@
@EqualsAndHashCode
@ToString
-public class Device implements Serializable {
+public class Device extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("CgroupPermissions")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/DeviceRequest.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DeviceRequest.java
new file mode 100644
index 000000000..549d51b57
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DeviceRequest.java
@@ -0,0 +1,75 @@
+package com.github.dockerjava.api.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+@EqualsAndHashCode
+@ToString
+public class DeviceRequest extends DockerObject implements Serializable {
+ public static final long serialVersionUID = 1L;
+
+ @JsonProperty("Driver")
+ private String driver;
+
+ @JsonProperty("Count")
+ private Integer count;
+
+ @JsonProperty("DeviceIDs")
+ private List deviceIds;
+
+ @JsonProperty("Capabilities")
+ private List> capabilities;
+
+ @JsonProperty("Options")
+ private Map options;
+
+ public String getDriver() {
+ return driver;
+ }
+
+ public DeviceRequest withDriver(String driver) {
+ this.driver = driver;
+ return this;
+ }
+
+ public Integer getCount() {
+ return count;
+ }
+
+ public DeviceRequest withCount(Integer count) {
+ this.count = count;
+ return this;
+ }
+
+ public List getDeviceIds() {
+ return deviceIds;
+ }
+
+ public DeviceRequest withDeviceIds(List deviceIds) {
+ this.deviceIds = deviceIds;
+ return this;
+ }
+
+ public List> getCapabilities() {
+ return capabilities;
+ }
+
+ public DeviceRequest withCapabilities(List> capabilities) {
+ this.capabilities = capabilities;
+ return this;
+ }
+
+ public Map getOptions() {
+ return options;
+ }
+
+ public DeviceRequest withOptions(Map options) {
+ this.options = options;
+ return this;
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/DiscreteResourceSpec.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DiscreteResourceSpec.java
index 0771fb180..80feee509 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/DiscreteResourceSpec.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DiscreteResourceSpec.java
@@ -2,6 +2,7 @@
import java.io.Serializable;
+@Deprecated
public class DiscreteResourceSpec extends GenericResource implements Serializable {
private static final long serialVersionUID = 1L;
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/DockerObject.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DockerObject.java
new file mode 100644
index 000000000..463dc15a1
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DockerObject.java
@@ -0,0 +1,20 @@
+package com.github.dockerjava.api.model;
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @see DockerObjectAccessor
+ */
+public abstract class DockerObject {
+
+ HashMap rawValues = new HashMap<>();
+
+ @JsonAnyGetter
+ public Map getRawValues() {
+ return Collections.unmodifiableMap(this.rawValues);
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/DockerObjectAccessor.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DockerObjectAccessor.java
new file mode 100644
index 000000000..0827c4a34
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DockerObjectAccessor.java
@@ -0,0 +1,27 @@
+package com.github.dockerjava.api.model;
+
+import java.util.HashMap;
+
+public final class DockerObjectAccessor {
+
+ /**
+ * @deprecated not for public usage, unless you _really_ understand what you're doing
+ */
+ @Deprecated
+ public static void overrideRawValues(DockerObject o, HashMap rawValues) {
+ o.rawValues = rawValues != null ? rawValues : new HashMap<>();
+ }
+
+ /**
+ * This is an advanced method for setting raw values on the resulting object
+ * that will fully overwrite any previously set value for given key.
+ *
+ * Make sure to check Docker's API before using it.
+ */
+ public static void overrideRawValue(DockerObject o, String key, Object value) {
+ o.rawValues.put(key, value);
+ }
+
+ private DockerObjectAccessor() {
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Driver.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Driver.java
index cde23cb2b..bdc05e53b 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Driver.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Driver.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class Driver implements Serializable {
+public class Driver extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/DriverStatus.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DriverStatus.java
index cca52f1d0..57fe32247 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/DriverStatus.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DriverStatus.java
@@ -11,7 +11,7 @@
*/
@EqualsAndHashCode
@ToString
-public class DriverStatus implements Serializable {
+public class DriverStatus extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Root Dir")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Endpoint.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Endpoint.java
index eb6c982ed..cebbfea1c 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Endpoint.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Endpoint.java
@@ -12,7 +12,7 @@
*/
@EqualsAndHashCode
@ToString
-public class Endpoint implements Serializable {
+public class Endpoint extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/EndpointSpec.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/EndpointSpec.java
index 75b5056f0..c0ce386fa 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/EndpointSpec.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/EndpointSpec.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class EndpointSpec implements Serializable {
+public class EndpointSpec extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/EndpointVirtualIP.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/EndpointVirtualIP.java
index fad960fb7..0babfba4c 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/EndpointVirtualIP.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/EndpointVirtualIP.java
@@ -12,7 +12,7 @@
*/
@EqualsAndHashCode
@ToString
-public class EndpointVirtualIP implements Serializable {
+public class EndpointVirtualIP extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ErrorDetail.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ErrorDetail.java
index 10c3310d1..63e670772 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ErrorDetail.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ErrorDetail.java
@@ -1,10 +1,14 @@
package com.github.dockerjava.api.model;
import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
import java.io.Serializable;
-public class ErrorDetail implements Serializable {
+@EqualsAndHashCode
+@ToString
+public class ErrorDetail extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ErrorResponse.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ErrorResponse.java
index ef4f93eb1..523a35729 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ErrorResponse.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ErrorResponse.java
@@ -4,6 +4,7 @@
import java.io.Serializable;
+@Deprecated
public class ErrorResponse implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Event.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Event.java
index 59ecc67bd..0eedbc553 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Event.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Event.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class Event implements Serializable {
+public class Event extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/EventActor.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/EventActor.java
index e05414d34..fbcf088f7 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/EventActor.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/EventActor.java
@@ -14,7 +14,7 @@
*/
@EqualsAndHashCode
@ToString
-public class EventActor implements Serializable {
+public class EventActor extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/EventType.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/EventType.java
index 697c1e429..b7c64ecc5 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/EventType.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/EventType.java
@@ -11,6 +11,7 @@
* @since 1.24
*/
public enum EventType {
+ CONFIG("config"),
/**
* @since 1.24
*/
@@ -26,7 +27,10 @@ public enum EventType {
*/
IMAGE("image"),
NETWORK("network"),
+ NODE("node"),
PLUGIN("plugin"),
+ SECRET("secret"),
+ SERVICE("service"),
VOLUME("volume");
private static final Map EVENT_TYPES = new HashMap<>();
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPort.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPort.java
index 1d0ac8bc8..4226fd94b 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPort.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPort.java
@@ -2,23 +2,12 @@
import static com.github.dockerjava.api.model.InternetProtocol.TCP;
import static com.github.dockerjava.api.model.InternetProtocol.UDP;
+import static com.github.dockerjava.api.model.InternetProtocol.SCTP;
-import java.io.IOException;
import java.io.Serializable;
-import java.util.Map.Entry;
-
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.node.NullNode;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
import com.github.dockerjava.api.model.Ports.Binding;
import lombok.EqualsAndHashCode;
@@ -27,8 +16,6 @@
* {@link InternetProtocol}. It can be published by Docker by {@link Ports#bind(ExposedPort, Binding) binding} it to a host port,
* represented by a {@link Binding}.
*/
-@JsonDeserialize(using = ExposedPort.Deserializer.class)
-@JsonSerialize(using = ExposedPort.Serializer.class)
@EqualsAndHashCode
public class ExposedPort implements Serializable {
private static final long serialVersionUID = 1L;
@@ -64,7 +51,7 @@ public ExposedPort(int port) {
* Creates an {@link ExposedPort} for the given parameters.
*
* @param scheme
- * the {@link #getScheme() scheme}, tcp or udp
+ * the {@link #getScheme() scheme}, tcp, udp or sctp
* @param port
* the {@link #getPort() port number}
* @deprecated use {@link #ExposedPort(int, InternetProtocol)}
@@ -82,7 +69,7 @@ public InternetProtocol getProtocol() {
}
/**
- * @return the scheme (internet protocol), tcp or udp
+ * @return the scheme (internet protocol), tcp, udp or sctp
* @deprecated use {@link #getProtocol()}
*/
@Deprecated
@@ -111,6 +98,14 @@ public static ExposedPort udp(int port) {
return new ExposedPort(port, UDP);
}
+ /**
+ * Creates an {@link ExposedPort} for {@link InternetProtocol#SCTP}. This is a shortcut for
+ * new ExposedPort(port, {@link InternetProtocol#SCTP})
+ */
+ public static ExposedPort sctp(int port) {
+ return new ExposedPort(port, SCTP);
+ }
+
/**
* Parses a textual port specification (as used by the Docker CLI) to an {@link ExposedPort}.
*
@@ -120,6 +115,7 @@ public static ExposedPort udp(int port) {
* @throws IllegalArgumentException
* if the specification cannot be parsed
*/
+ @JsonCreator
public static ExposedPort parse(String serialized) throws IllegalArgumentException {
try {
String[] parts = serialized.split("/");
@@ -143,36 +139,8 @@ public static ExposedPort parse(String serialized) throws IllegalArgumentExcepti
* @return a string representation of this {@link ExposedPort}
*/
@Override
+ @JsonValue
public String toString() {
return port + "/" + protocol.toString();
}
-
- public static class Deserializer extends JsonDeserializer {
- @Override
- public ExposedPort deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
- throws IOException, JsonProcessingException {
- ObjectCodec oc = jsonParser.getCodec();
- JsonNode node = oc.readTree(jsonParser);
- if (!node.equals(NullNode.getInstance())) {
- Entry field = node.fields().next();
- return ExposedPort.parse(field.getKey());
- } else {
- return null;
- }
- }
- }
-
- public static class Serializer extends JsonSerializer {
-
- @Override
- public void serialize(ExposedPort exposedPort, JsonGenerator jsonGen, SerializerProvider serProvider)
- throws IOException, JsonProcessingException {
-
- jsonGen.writeStartObject();
- jsonGen.writeFieldName(exposedPort.toString());
- jsonGen.writeEndObject();
- }
-
- }
-
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPorts.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPorts.java
index c20e84cec..6f5ae9ebd 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPorts.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPorts.java
@@ -1,27 +1,16 @@
package com.github.dockerjava.api.model;
-import java.io.IOException;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.ToString;
+
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.node.NullNode;
-
-@JsonSerialize(using = ExposedPorts.Serializer.class)
-@JsonDeserialize(using = ExposedPorts.Deserializer.class)
+@ToString
public class ExposedPorts implements Serializable {
private static final long serialVersionUID = 1L;
@@ -39,40 +28,20 @@ public ExposedPort[] getExposedPorts() {
return exposedPorts;
}
- public static class Serializer extends JsonSerializer {
-
- @Override
- public void serialize(ExposedPorts exposedPorts, JsonGenerator jsonGen, SerializerProvider serProvider)
- throws IOException, JsonProcessingException {
-
- jsonGen.writeStartObject();
- for (ExposedPort exposedPort : exposedPorts.getExposedPorts()) {
- jsonGen.writeFieldName(exposedPort.toString());
- jsonGen.writeStartObject();
- jsonGen.writeEndObject();
- }
- jsonGen.writeEndObject();
- }
-
+ @JsonCreator
+ public static ExposedPorts fromPrimitive(Map object) {
+ return new ExposedPorts(
+ object.keySet().stream().map(ExposedPort::parse).toArray(ExposedPort[]::new)
+ );
}
- public static class Deserializer extends JsonDeserializer {
- @Override
- public ExposedPorts deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
- throws IOException, JsonProcessingException {
-
- List exposedPorts = new ArrayList<>();
- ObjectCodec oc = jsonParser.getCodec();
- JsonNode node = oc.readTree(jsonParser);
- for (Iterator> it = node.fields(); it.hasNext();) {
-
- Map.Entry field = it.next();
- if (!field.getValue().equals(NullNode.getInstance())) {
- exposedPorts.add(ExposedPort.parse(field.getKey()));
- }
- }
- return new ExposedPorts(exposedPorts.toArray(new ExposedPort[0]));
- }
+ @JsonValue
+ public Map toPrimitive() {
+ return Stream.of(exposedPorts).collect(Collectors.toMap(
+ ExposedPort::toString,
+ __ -> new Object(),
+ (a, b) -> a
+ ));
}
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExternalCA.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExternalCA.java
index 95a80eb03..3a68410d8 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExternalCA.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExternalCA.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class ExternalCA implements Serializable {
+public class ExternalCA extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Frame.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Frame.java
index 041e22423..fdd5dd62e 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Frame.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Frame.java
@@ -8,7 +8,7 @@
* Represents a logging frame.
*/
@EqualsAndHashCode
-public class Frame implements Serializable {
+public class Frame extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
private final StreamType streamType;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/GenericResource.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/GenericResource.java
index 9b994d8dd..f6ddfabe5 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/GenericResource.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/GenericResource.java
@@ -1,10 +1,14 @@
package com.github.dockerjava.api.model;
import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
import java.io.Serializable;
-public abstract class GenericResource implements Serializable {
+@EqualsAndHashCode
+@ToString
+public abstract class GenericResource extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Kind")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/HealthCheck.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/HealthCheck.java
index e21a0763f..0e41b873f 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/HealthCheck.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/HealthCheck.java
@@ -28,7 +28,7 @@
*/
@EqualsAndHashCode
@ToString
-public class HealthCheck implements Serializable {
+public class HealthCheck extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Interval")
@@ -55,6 +55,12 @@ public class HealthCheck implements Serializable {
@JsonProperty("StartPeriod")
private Long startPeriod;
+ /**
+ * @since 1.44
+ */
+ @JsonProperty("StartInterval")
+ private Long startInterval;
+
public Long getInterval() {
return interval;
}
@@ -63,11 +69,19 @@ public Long getTimeout() {
return timeout;
}
+ /**
+ * Set interval in nanoseconds
+ * @return this {@link HealthCheck} instance
+ */
public HealthCheck withInterval(Long interval) {
this.interval = interval;
return this;
}
+ /**
+ * Set timeout in nanoseconds
+ * @return this {@link HealthCheck} instance
+ */
public HealthCheck withTimeout(Long timeout) {
this.timeout = timeout;
return this;
@@ -95,8 +109,25 @@ public Long getStartPeriod() {
return startPeriod;
}
+ /**
+ * Set startPeriod in nanoseconds
+ * @return this {@link HealthCheck} instance
+ */
public HealthCheck withStartPeriod(Long startPeriod) {
this.startPeriod = startPeriod;
return this;
}
+
+ public Long getStartInterval() {
+ return startInterval;
+ }
+
+ /**
+ * Set startInterval in nanoseconds
+ * @return this {@link HealthCheck} instance
+ */
+ public HealthCheck withStartInterval(Long startInterval) {
+ this.startInterval = startInterval;
+ return this;
+ }
}
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 bcae9a4cc..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
@@ -19,7 +19,7 @@
*/
@EqualsAndHashCode
@ToString
-public class HostConfig implements Serializable {
+public class HostConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
private static final List PREDEFINED_NETWORKS = Arrays.asList("bridge", "host", "none");
@@ -70,9 +70,12 @@ public static HostConfig newHostConfig() {
@JsonProperty("MemorySwappiness")
private Long memorySwappiness;
- @JsonProperty("NanoCPUs")
+ @JsonProperty("NanoCpus")
private Long nanoCPUs;
+ @JsonProperty("Annotations")
+ private Map annotations;
+
@JsonProperty("CapAdd")
private Capability[] capAdd;
@@ -112,6 +115,12 @@ public static HostConfig newHostConfig() {
@JsonProperty("DeviceCgroupRules")
private List deviceCgroupRules;
+ /**
+ * @since {@link com.github.dockerjava.core.RemoteApiVersion#VERSION_1_40}
+ */
+ @JsonProperty("DeviceRequests")
+ private List deviceRequests;
+
/**
* @since {@link RemoteApiVersion#VERSION_1_25}
*/
@@ -286,6 +295,9 @@ public static HostConfig newHostConfig() {
@JsonProperty("ConsoleSize")
private List consoleSize;
+ @JsonProperty("CgroupnsMode")
+ private String cgroupnsMode;
+
@JsonIgnore
public Bind[] getBinds() {
return (binds == null) ? new Bind[0] : binds.getBinds();
@@ -295,6 +307,11 @@ public Integer getBlkioWeight() {
return blkioWeight;
}
+ @CheckForNull
+ public Map getAnnotations() {
+ return annotations;
+ }
+
public Capability[] getCapAdd() {
return capAdd;
}
@@ -627,6 +644,11 @@ public HostConfig withBlkioWeightDevice(List blkioWeightDevic
return this;
}
+ public HostConfig withAnnotations(Map annotations) {
+ this.annotations = annotations;
+ return this;
+ }
+
/**
* @see #capAdd
*/
@@ -839,6 +861,7 @@ public HostConfig withMemorySwappiness(Long memorySwappiness) {
*
'host': use the host network stack inside the container. Note: the host mode gives the container full access to local system
* services such as D-bus and is therefore considered insecure.
*
+ * Any other value is interpreted as a custom network's name for this container to connect to.
*/
public HostConfig withNetworkMode(String networkMode) {
this.networkMode = networkMode;
@@ -1037,6 +1060,16 @@ public HostConfig withDeviceCgroupRules(List deviceCgroupRules) {
return this;
}
+ @CheckForNull
+ public List getDeviceRequests() {
+ return deviceRequests;
+ }
+
+ public HostConfig withDeviceRequests(List deviceRequests) {
+ this.deviceRequests = deviceRequests;
+ return this;
+ }
+
@CheckForNull
public Long getNanoCPUs() {
return nanoCPUs;
@@ -1177,6 +1210,16 @@ public HostConfig withUsernsMode(String usernsMode) {
return this;
}
+ @CheckForNull
+ public String getCgroupnsMode() {
+ return cgroupnsMode;
+ }
+
+ public HostConfig withCgroupnsMode(String cgroupnsMode) {
+ this.cgroupnsMode = cgroupnsMode;
+ return this;
+ }
+
@CheckForNull
public Map getSysctls() {
return sysctls;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Identifier.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Identifier.java
index c214a8b16..a690548b4 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Identifier.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Identifier.java
@@ -11,7 +11,7 @@
*/
@EqualsAndHashCode
@ToString
-public class Identifier implements Serializable {
+public class Identifier extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
public final Repository repository;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Image.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Image.java
index e6552eb35..732dcfe4f 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Image.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Image.java
@@ -1,10 +1,12 @@
package com.github.dockerjava.api.model;
import com.fasterxml.jackson.annotation.JsonProperty;
+
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.io.Serializable;
+import java.util.Map;
/**
*
@@ -13,7 +15,7 @@
*/
@EqualsAndHashCode
@ToString
-public class Image implements Serializable {
+public class Image extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Created")
@@ -28,12 +30,24 @@ public class Image implements Serializable {
@JsonProperty("RepoTags")
private String[] repoTags;
+ @JsonProperty("RepoDigests")
+ private String[] repoDigests;
+
@JsonProperty("Size")
private Long size;
@JsonProperty("VirtualSize")
private Long virtualSize;
+ @JsonProperty("SharedSize")
+ private Long sharedSize;
+
+ @JsonProperty("Labels")
+ public Map labels;
+
+ @JsonProperty("Containers")
+ private Integer containers;
+
public String getId() {
return id;
}
@@ -42,6 +56,10 @@ public String[] getRepoTags() {
return repoTags;
}
+ public String[] getRepoDigests() {
+ return repoDigests;
+ }
+
public String getParentId() {
return parentId;
}
@@ -57,4 +75,17 @@ public Long getSize() {
public Long getVirtualSize() {
return virtualSize;
}
+
+
+ public Long getSharedSize() {
+ return sharedSize;
+ }
+
+ public Map getLabels() {
+ return labels;
+ }
+
+ public Integer getContainers() {
+ return containers;
+ }
}
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 e472fa622..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
@@ -16,7 +16,7 @@
*/
@EqualsAndHashCode
@ToString
-public class Info implements Serializable {
+public class Info extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
@@ -97,6 +97,12 @@ public class Info 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}
*/
@@ -232,6 +238,12 @@ public class Info implements Serializable {
@JsonProperty("Isolation")
private String isolation;
+ @JsonProperty("SecurityOptions")
+ private List securityOptions;
+
+ @JsonProperty("Runtimes")
+ private Map runtimes;
+
/**
* @see #architecture
*/
@@ -480,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
*/
@@ -488,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
*/
@@ -1063,4 +1107,34 @@ public Info withIsolation(String isolation) {
this.isolation = 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/InfoRegistryConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/InfoRegistryConfig.java
index 8c4d9f35d..80bf803d8 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/InfoRegistryConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/InfoRegistryConfig.java
@@ -14,7 +14,7 @@
*/
@EqualsAndHashCode
@ToString
-public final class InfoRegistryConfig implements Serializable {
+public final class InfoRegistryConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("IndexConfigs")
@@ -82,7 +82,9 @@ public InfoRegistryConfig withMirrors(Object mirrors) {
*/
@EqualsAndHashCode
@ToString
- public static final class IndexConfig {
+ public static final class IndexConfig extends DockerObject implements Serializable {
+ private static final long serialVersionUID = 1L;
+
@JsonProperty("Mirrors")
private List mirrors;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java
index 2bb4db285..ab400fcc8 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/InternetProtocol.java
@@ -5,6 +5,7 @@
*
* @see #TCP
* @see #UDP
+ * @see #SCTP
*/
public enum InternetProtocol {
/**
@@ -15,7 +16,12 @@ public enum InternetProtocol {
/**
* The User Datagram Protocol
*/
- UDP;
+ UDP,
+
+ /**
+ * The Stream Control Transmission Protocol
+ */
+ SCTP;
/**
* The default {@link InternetProtocol}: {@link #TCP}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Link.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Link.java
index 20b2c1b26..4b9b27acf 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Link.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Link.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.model;
import lombok.EqualsAndHashCode;
+import lombok.ToString;
import java.io.Serializable;
@@ -10,7 +11,8 @@
* variables in the target container as well as creating a network bridge between both containers.
*/
@EqualsAndHashCode
-public class Link implements Serializable {
+@ToString
+public class Link extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
private final String name;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Links.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Links.java
index 1c32984ee..18bfc75ba 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Links.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Links.java
@@ -1,26 +1,12 @@
package com.github.dockerjava.api.model;
-import java.io.IOException;
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
+import java.util.stream.Stream;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.node.NullNode;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
-@JsonSerialize(using = Links.Serializer.class)
-@JsonDeserialize(using = Links.Deserializer.class)
public class Links implements Serializable {
private static final long serialVersionUID = 1L;
@@ -38,37 +24,15 @@ public Link[] getLinks() {
return links;
}
- public static class Serializer extends JsonSerializer {
-
- @Override
- public void serialize(final Links links, final JsonGenerator jsonGen, final SerializerProvider serProvider)
- throws IOException, JsonProcessingException {
- jsonGen.writeStartArray();
- for (final Link link : links.getLinks()) {
- jsonGen.writeString(link.toString());
- }
- jsonGen.writeEndArray();
- }
-
+ @JsonCreator
+ public static Links fromPrimitive(String[] links) {
+ return new Links(
+ Stream.of(links).map(Link::parse).toArray(Link[]::new)
+ );
}
- public static class Deserializer extends JsonDeserializer {
-
- @Override
- public Links deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext)
- throws IOException, JsonProcessingException {
- final List binds = new ArrayList<>();
- final ObjectCodec oc = jsonParser.getCodec();
- final JsonNode node = oc.readTree(jsonParser);
- for (final Iterator it = node.elements(); it.hasNext();) {
-
- final JsonNode element = it.next();
- if (!element.equals(NullNode.getInstance())) {
- binds.add(Link.parse(element.asText()));
- }
- }
- return new Links(binds.toArray(new Link[0]));
- }
+ @JsonValue
+ public String[] toPrimitive() {
+ return Stream.of(links).map(Link::toString).toArray(String[]::new);
}
-
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/LoadResponseItem.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/LoadResponseItem.java
new file mode 100644
index 000000000..bf90c69bf
--- /dev/null
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/LoadResponseItem.java
@@ -0,0 +1,33 @@
+package com.github.dockerjava.api.model;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+public class LoadResponseItem extends ResponseItem {
+
+ private static final long serialVersionUID = 1L;
+
+ private static final String IMPORT_SUCCESS = "Loaded image:";
+
+ /**
+ * Returns whether the stream field indicates a successful build operation
+ */
+ @JsonIgnore
+ public boolean isBuildSuccessIndicated() {
+ if (isErrorIndicated() || getStream() == null) {
+ return false;
+ }
+
+ return getStream().contains(IMPORT_SUCCESS);
+ }
+
+ @JsonIgnore
+ public String getMessage() {
+ if (!isBuildSuccessIndicated()) {
+ return null;
+ } else if (getStream().contains(IMPORT_SUCCESS)) {
+ return getStream();
+ }
+
+ return null;
+ }
+}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/LogConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/LogConfig.java
index 4ea19041e..218cdd827 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/LogConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/LogConfig.java
@@ -4,6 +4,8 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
import javax.annotation.CheckForNull;
import java.io.Serializable;
@@ -18,7 +20,9 @@
* docker will ignore them. In most cases setting the config option to null will suffice. Consult the docker remote API for a more detailed
* and up-to-date explanation of the available types and their options.
*/
-public class LogConfig implements Serializable {
+@EqualsAndHashCode
+@ToString
+public class LogConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Type")
@@ -62,6 +66,7 @@ public LogConfig setConfig(Map config) {
public enum LoggingType {
NONE("none"),
DEFAULT("json-file"),
+ LOCAL("local"),
ETWLOGS("etwlogs"),
JSON_FILE("json-file"),
SYSLOG("syslog"),
@@ -71,7 +76,8 @@ public enum LoggingType {
AWSLOGS("awslogs"),
DB("db"), // Synology specific driver
SPLUNK("splunk"),
- GCPLOGS("gcplogs");
+ GCPLOGS("gcplogs"),
+ LOKI("loki");
private String type;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/LxcConf.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/LxcConf.java
index ddf1bbae0..36fc1a9cb 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/LxcConf.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/LxcConf.java
@@ -1,10 +1,14 @@
package com.github.dockerjava.api.model;
import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
import java.io.Serializable;
-public class LxcConf implements Serializable {
+@EqualsAndHashCode
+@ToString
+public class LxcConf extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Key")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/MemoryStatsConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/MemoryStatsConfig.java
index 12e6abccf..b57f05135 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/MemoryStatsConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/MemoryStatsConfig.java
@@ -1,6 +1,8 @@
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;
@@ -10,7 +12,9 @@
*
* @author Yuting Liu
*/
-public class MemoryStatsConfig implements Serializable {
+@EqualsAndHashCode
+@ToString
+public class MemoryStatsConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("stats")
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 7254ccb19..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
@@ -12,7 +12,7 @@
*/
@EqualsAndHashCode
@ToString
-public class Mount implements Serializable {
+public class Mount extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
/**
@@ -57,6 +57,12 @@ public class Mount 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 62557df47..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
@@ -14,6 +14,14 @@ public enum MountType {
//@since 1.29
@JsonProperty("tmpfs")
- TMPFS
+ TMPFS,
+
+ //@since 1.40
+ @JsonProperty("npipe")
+ NPIPE,
+
+ //@since 1.48
+ @JsonProperty("image")
+ IMAGE,
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/NamedResourceSpec.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NamedResourceSpec.java
index e06f69d01..198c75543 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/NamedResourceSpec.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NamedResourceSpec.java
@@ -5,6 +5,7 @@
/**
* @since {@link RemoteApiVersion#VERSION_1_24}
*/
+@Deprecated
public class NamedResourceSpec extends GenericResource implements Serializable {
private static final long serialVersionUID = 1L;
}
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 0187d73f4..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,17 +7,21 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Date;
import java.util.List;
import java.util.Map;
@EqualsAndHashCode
@ToString
-public class Network implements Serializable {
+public class Network extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@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;
}
@@ -94,7 +102,14 @@ public Map getLabels() {
@EqualsAndHashCode
@ToString
- public static class ContainerNetworkConfig {
+ public static class ContainerNetworkConfig extends DockerObject implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * @since {@link RemoteApiVersion#VERSION_1_22}
+ */
+ @JsonProperty("Name")
+ private String name;
@JsonProperty("EndpointID")
private String endpointId;
@@ -108,6 +123,10 @@ public static class ContainerNetworkConfig {
@JsonProperty("IPv6Address")
private String ipv6Address;
+ public String getName() {
+ return name;
+ }
+
public String getEndpointId() {
return endpointId;
}
@@ -127,7 +146,8 @@ public String getIpv6Address() {
@EqualsAndHashCode
@ToString
- public static class Ipam {
+ public static class Ipam extends DockerObject implements Serializable {
+ private static final long serialVersionUID = 1L;
@JsonProperty("Driver")
private String driver;
@@ -165,7 +185,10 @@ public Ipam withDriver(String driver) {
return this;
}
- public static class Config {
+ @EqualsAndHashCode
+ @ToString
+ public static class Config extends DockerObject implements Serializable {
+ private static final long serialVersionUID = 1L;
@JsonProperty("Subnet")
private String subnet;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkAttachmentConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkAttachmentConfig.java
index 2afa87b73..db0eb1ded 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkAttachmentConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkAttachmentConfig.java
@@ -13,7 +13,7 @@
*/
@EqualsAndHashCode
@ToString
-public class NetworkAttachmentConfig implements Serializable {
+public class NetworkAttachmentConfig extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java
index 3ef92ac64..e28d8f52c 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java
@@ -17,7 +17,7 @@
*/
@EqualsAndHashCode
@ToString
-public class NetworkSettings implements Serializable {
+public class NetworkSettings extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Bridge")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Node.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Node.java
index 2b12ab48f..2bb832e48 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Node.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Node.java
@@ -11,7 +11,7 @@
*/
@EqualsAndHashCode
@ToString
-public class Node implements Serializable {
+public class Node extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Name")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ObjectVersion.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ObjectVersion.java
index 0b0259049..5fa361977 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ObjectVersion.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ObjectVersion.java
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.model;
import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.EqualsAndHashCode;
import java.io.Serializable;
@@ -13,7 +14,8 @@
* same base version, only one of the requests can succeed. As a result, two separate update requests that
* happen at the same time will not unintentionally overwrite each other.
*/
-public class ObjectVersion implements Serializable {
+@EqualsAndHashCode
+public class ObjectVersion extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("Index")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PeerNode.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PeerNode.java
index e20af63b9..8937b9593 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PeerNode.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PeerNode.java
@@ -12,7 +12,7 @@
*/
@EqualsAndHashCode
@ToString
-public class PeerNode implements Serializable {
+public class PeerNode extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PidsStatsConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PidsStatsConfig.java
index c3d13596f..df953e140 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PidsStatsConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PidsStatsConfig.java
@@ -1,6 +1,8 @@
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;
@@ -10,7 +12,9 @@
*
* @author Yuting Liu
*/
-public class PidsStatsConfig implements Serializable {
+@EqualsAndHashCode
+@ToString
+public class PidsStatsConfig extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
@JsonProperty("current")
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortBinding.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortBinding.java
index 47655079b..2b7901e92 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortBinding.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortBinding.java
@@ -17,7 +17,7 @@
*/
@EqualsAndHashCode
@ToString
-public class PortBinding implements Serializable {
+public class PortBinding extends DockerObject implements Serializable {
private static final long serialVersionUID = 1L;
private final Binding binding;
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortConfig.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortConfig.java
index 57f2f61b0..cec07d9cd 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortConfig.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortConfig.java
@@ -12,7 +12,7 @@
*/
@EqualsAndHashCode
@ToString
-public class PortConfig implements Serializable {
+public class PortConfig extends DockerObject implements Serializable {
public static final long serialVersionUID = 1L;
/**
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortConfigProtocol.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortConfigProtocol.java
index f47b06f1d..8af2fe02c 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortConfigProtocol.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/PortConfigProtocol.java
@@ -11,6 +11,9 @@ public enum PortConfigProtocol {
TCP,
@JsonProperty("udp")
- UDP
+ UDP,
+
+ @JsonProperty("sctp")
+ SCTP
}
diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Ports.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Ports.java
index a2ae85e23..0411ca218 100644
--- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/Ports.java
+++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/Ports.java
@@ -1,25 +1,16 @@
package com.github.dockerjava.api.model;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.node.NullNode;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
import lombok.EqualsAndHashCode;
-import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
-import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
/**
* A container for port bindings, made available as a {@link Map} via its {@link #getBindings()} method.
@@ -30,9 +21,6 @@
* @see HostConfig#getPortBindings()
* @see NetworkSettings#getPorts()
*/
-@SuppressWarnings(value = "checkstyle:equalshashcode")
-@JsonDeserialize(using = Ports.Deserializer.class)
-@JsonSerialize(using = Ports.Serializer.class)
public class Ports implements Serializable {
private static final long serialVersionUID = 1L;
@@ -118,7 +106,8 @@ public Map getBindings() {
* @see ExposedPort
*/
@EqualsAndHashCode
- public static class Binding {
+ public static class Binding extends DockerObject implements Serializable {
+ private static final long serialVersionUID = 1L;
/**
* Creates a {@link Binding} for the given {@link #getHostPortSpec() port spec}, leaving the {@link #getHostIp() IP address}
@@ -259,60 +248,40 @@ public String toString() {
}
}
- public static class Deserializer extends JsonDeserializer {
- @Override
- public Ports deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
- throws IOException, JsonProcessingException {
-
- Ports out = new Ports();
- ObjectCodec oc = jsonParser.getCodec();
- JsonNode node = oc.readTree(jsonParser);
- for (Iterator> it = node.fields(); it.hasNext();) {
+ @JsonCreator
+ public static Ports fromPrimitive(Map>> map) {
+ Ports out = new Ports();
+ for (Entry>> entry : map.entrySet()) {
+ ExposedPort exposedPort = ExposedPort.parse(entry.getKey());
- Map.Entry portNode = it.next();
- JsonNode bindingsArray = portNode.getValue();
- if (bindingsArray.equals(NullNode.getInstance())) {
- out.bind(ExposedPort.parse(portNode.getKey()), null);
- } else {
- for (int i = 0; i < bindingsArray.size(); i++) {
- JsonNode bindingNode = bindingsArray.get(i);
- if (!bindingNode.equals(NullNode.getInstance())) {
- String hostIp = bindingNode.get("HostIp").textValue();
- String hostPort = bindingNode.get("HostPort").textValue();
- out.bind(ExposedPort.parse(portNode.getKey()), new Binding(hostIp, hostPort));
- }
- }
+ if (entry.getValue() == null) {
+ out.bind(exposedPort, null);
+ } else {
+ for (Map binding : entry.getValue()) {
+ out.bind(exposedPort, new Binding(binding.get("HostIp"), binding.get("HostPort")));
}
}
- return out;
}
+ return out;
}
- public static class Serializer extends JsonSerializer {
-
- @Override
- public void serialize(Ports portBindings, JsonGenerator jsonGen, SerializerProvider serProvider)
- throws IOException, JsonProcessingException {
-
- jsonGen.writeStartObject();
- for (Entry entry : portBindings.getBindings().entrySet()) {
- jsonGen.writeFieldName(entry.getKey().toString());
- if (entry.getValue() != null) {
- jsonGen.writeStartArray();
- for (Binding binding : entry.getValue()) {
- jsonGen.writeStartObject();
- jsonGen.writeStringField("HostIp", binding.getHostIp() == null ? "" : binding.getHostIp());
- jsonGen.writeStringField("HostPort", binding.getHostPortSpec() == null ? "" : binding.getHostPortSpec());
- jsonGen.writeEndObject();
- }
- jsonGen.writeEndArray();
- } else {
- jsonGen.writeNull();
- }
- }
- jsonGen.writeEndObject();
- }
-
+ @JsonValue
+ public Map>> toPrimitive() {
+ // Use reduce-like collect to be able to put nulls into the values
+ return ports.entrySet().stream().collect(
+ HashMap::new,
+ (map, entry) -> {
+ List