diff --git a/scope b/scope index 912143f6c..9f241c8ad 100755 --- a/scope +++ b/scope @@ -30,6 +30,34 @@ WEAVESCOPE_DOCKER_ARGS=${WEAVESCOPE_DOCKER_ARGS:-} COMMAND=$1 shift 1 +# - The image embeds the weave script & Docker 1.3.1 client +# - Docker versions prior to 1.5.0 do not support --pid=host +MIN_DOCKER_VERSION=1.5.0 + +check_docker_version() { + if ! DOCKER_VERSION=$(docker -v | sed -n -e 's|^Docker version \([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*|\1|p') || [ -z "$DOCKER_VERSION" ] ; then + echo "ERROR: Unable to parse docker version" >&2 + exit 1 + fi + + DOCKER_VERSION_MAJOR=$(echo "$DOCKER_VERSION" | cut -d. -f 1) + DOCKER_VERSION_MINOR=$(echo "$DOCKER_VERSION" | cut -d. -f 2) + DOCKER_VERSION_PATCH=$(echo "$DOCKER_VERSION" | cut -d. -f 3) + + MIN_DOCKER_VERSION_MAJOR=$(echo "$MIN_DOCKER_VERSION" | cut -d. -f 1) + MIN_DOCKER_VERSION_MINOR=$(echo "$MIN_DOCKER_VERSION" | cut -d. -f 2) + MIN_DOCKER_VERSION_PATCH=$(echo "$MIN_DOCKER_VERSION" | cut -d. -f 3) + + if [ \( "$DOCKER_VERSION_MAJOR" -lt "$MIN_DOCKER_VERSION_MAJOR" \) -o \ + \( "$DOCKER_VERSION_MAJOR" -eq "$MIN_DOCKER_VERSION_MAJOR" -a \ + \( "$DOCKER_VERSION_MINOR" -lt "$MIN_DOCKER_VERSION_MINOR" -o \ + \( "$DOCKER_VERSION_MINOR" -eq "$MIN_DOCKER_VERSION_MINOR" -a \ + \( "$DOCKER_VERSION_PATCH" -lt "$MIN_DOCKER_VERSION_PATCH" \) \) \) \) ] ; then + echo "ERROR: scope requires Docker version $MIN_DOCKER_VERSION or later; you are running $DOCKER_VERSION" >&2 + exit 1 + fi +} + # Check that a container named $1 with image $2 is not running check_not_running() { case $(docker inspect --format='{{.State.Running}} {{.Config.Image}}' $1 2>/dev/null) in @@ -64,6 +92,8 @@ launch_command() { $WEAVESCOPE_DOCKER_ARGS $SCOPE_IMAGE --probe.docker true "$@" } +check_docker_version + case "$COMMAND" in command) launch_command "$@"