diff --git a/.travis.yml b/.travis.yml
index 1d78b3bb9..4e980294e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,40 @@
+sudo: required
+dist: trusty
language: java
+
+services:
+ - docker
+
jdk:
- oraclejdk7
+
+env:
+ global:
+ - DOCKER_TLS_VERIFY=""
+
+ matrix:
+ - repo="main" DOCKER_HOST="tcp://127.0.0.1:2375" DOCKER_VERSION="1.11.2-0~trusty" FAST_BUILD=true
+ - 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" DEPLOY=true
+ - 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
+# - $HOME/.m2 install would pollute it
+
before_install:
- - pip install --user codecov
+ - pip install --user codecov
+ - ./travis-before-install.sh
+
+script: if [ "${FAST_BUILD}" == true ]; then mvn package ; else mvn verify; fi
+
after_success:
- - ./travis-after-success.sh
+ - ./travis-after-success.sh
+
+after_script:
+ - sudo cat /var/log/upstart/docker.log
diff --git a/get-docker-com.sh b/get-docker-com.sh
new file mode 100755
index 000000000..66ca4aefc
--- /dev/null
+++ b/get-docker-com.sh
@@ -0,0 +1,313 @@
+#!/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
\ No newline at end of file
diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java
index d71cc33ae..fc74e1fde 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java
+++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java
@@ -19,6 +19,7 @@
import com.github.dockerjava.api.command.UpdateContainerCmd;
+import com.github.dockerjava.core.SSLConfig;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
@@ -161,7 +162,10 @@ public void init(DockerClientConfig dockerClientConfig) {
SSLContext sslContext = null;
try {
- sslContext = dockerClientConfig.getSSLConfig().getSSLContext();
+ final SSLConfig sslConfig = dockerClientConfig.getSSLConfig();
+ if (sslConfig != null) {
+ sslContext = sslConfig.getSSLContext();
+ }
} catch (Exception ex) {
throw new DockerClientException("Error in SSL Configuration", ex);
}
diff --git a/src/test/resources/travis-logback.xml b/src/test/resources/travis-logback.xml
new file mode 100644
index 000000000..250cbd335
--- /dev/null
+++ b/src/test/resources/travis-logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/travis-after-success.sh b/travis-after-success.sh
index aeb3c12c7..6d198daf5 100755
--- a/travis-after-success.sh
+++ b/travis-after-success.sh
@@ -1,9 +1,10 @@
#!/usr/bin/env bash
+
codecov
-if [[ $TRAVIS_BRANCH == "master" ]] && [[ $TRAVIS_PULL_REQUEST == "false" ]];
+if [[ $TRAVIS_BRANCH == "master" ]] && [[ $TRAVIS_PULL_REQUEST == "false" ]] && [[ $DEPLOY == "true" ]];
then
- cat << EOF >> ~/settings.xml
+ cat <> ~/settings.xml
diff --git a/travis-before-install.sh b/travis-before-install.sh
new file mode 100755
index 000000000..0253ce6bf
--- /dev/null
+++ b/travis-before-install.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+
+
+if [ "$FAST_BUILD" == true ]; then
+ echo "Fast build, skipping docker installations."
+ exit 0
+fi
+
+set -exu
+
+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
+
+./get-docker-com.sh
+#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 "src/test/resources/logback.xml"
+mv "src/test/resources/travis-logback.xml" "src/test/resources/logback.xml"
+
+echo 'DOCKER_OPTS="-H=unix:///var/run/docker.sock -H=tcp://127.0.0.1:2375"' | sudo tee -a /etc/default/docker
+sudo -E restart docker
+sleep 10
+docker version
+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