These integration tests cover interactions between the Docker daemon and the registry server. All tests are run using the docker cli.
The compose configuration is intended to setup a testing environment for Docker using multiple registry configurations. These configurations include different combinations of a v1 and v2 registry as well as TLS configurations.
The container image to run the integation tests will need to be pulled or built locally.
Building locally
$ docker build -t distribution/docker-integration .
Invoke the tests within Docker through the run.sh script.
$ ./run.sh
Run with aufs driver and tmp volume NOTE: Using a volume will prevent multiple runs from needing to re-pull images
$ DOCKER_GRAPHDRIVER=aufs DOCKER_VOLUME=/tmp/volume ./run.sh
These tests are useful for developing both as a registry and docker core developer. The following setup may be used to do integration testing between development versions
Insert into your .zshrc or .bashrc
# /usr/lib/docker for Docker-in-Docker
# Set this directory to make each invocation run much faster, without
# the need to repull images.
export DOCKER_VOLUME=$HOME/.docker-test-volume
# Use overlay for all Docker testing, try aufs if overlay not supported
export DOCKER_GRAPHDRIVER=overlay
# Name this according to personal preference
function rdtest() {
if [ "$1" != "" ]; then
DOCKER_BINARY=$GOPATH/src/github.com/docker/docker/bundles/$1/binary/docker
if [ ! -f $DOCKER_BINARY ]; then
current_version=`cat $GOPATH/src/github.com/docker/docker/VERSION`
echo "$DOCKER_BINARY does not exist"
echo "Current checked out docker version: $current_version"
echo "Checkout desired version and run 'make binary' from $GOPATH/src/github.com/docker/docker"
return 1
fi
fi
$GOPATH/src/github.com/docker/distribution/contrib/docker-integration/run.sh
}
Run with Docker release version
$ rdtest
Run using local development version of docker
$ cd $GOPATH/src/github.com/docker/docker
$ make binary
$ rdtest `cat VERSION`
Docker Compose Installation Guide
docker-compose up
The certificates must be installed in /etc/docker/cert.d in order to use TLS client auth and use the CA certificate.
sudo sh ./install_certs.sh
Tag an image as with any other private registry. Attempt to push the image.
docker pull hello-world
docker tag hello-world localhost:5440/hello-world
docker push localhost:5440/hello-world
docker tag hello-world localhost:5441/hello-world
docker push localhost:5441/hello-world
# Perform login using user `testuser` and password `passpassword`
Find the non-localhost ip address of local machine
Run the bats tests after updating /etc/hosts, installing the certificates, and
running the docker-compose script.
bats -p .
| Port | V2 | V1 | TLS | Authentication |
|---|---|---|---|---|
| 5000 | yes | yes | no | none |
| 5001 | no | yes | no | none |
| 5002 | yes | no | no | none |
| 5011 | no | yes | yes | none |
| 5440 | yes | yes | yes | none |
| 5441 | yes | yes | yes | basic (testuser/passpassword) |
| 5442 | yes | yes | yes | TLS client |
| 5443 | yes | yes | yes | TLS client (no CA) |
| 5444 | yes | yes | yes | TLS client + basic (testuser/passpassword) |
| 5445 | yes | yes | yes (no CA) | none |
| 5446 | yes | yes | yes (no CA) | basic (testuser/passpassword) |
| 5447 | yes | yes | yes (no CA) | TLS client |
| 5448 | yes | yes | yes (SSLv3) | none |