mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-18 21:09:38 +00:00
Make Scope work on Docker for Mac (#1414)
* Check if Docker for Mac is used and run app separately * Improve `check_probe_only` * Fix d4m detection
This commit is contained in:
committed by
Tom Wilkie
parent
fc60b9308e
commit
3e7dd1abbf
64
scope
64
scope
@@ -2,6 +2,8 @@
|
||||
|
||||
set -eu
|
||||
|
||||
ARGS="$@"
|
||||
|
||||
usage() {
|
||||
echo "Usage:"
|
||||
echo "scope launch [<peer> ...]"
|
||||
@@ -22,6 +24,7 @@ IMAGE_VERSION=${VERSION:-$IMAGE_VERSION}
|
||||
SCOPE_IMAGE_NAME=weaveworks/scope
|
||||
SCOPE_IMAGE=$SCOPE_IMAGE_NAME:$IMAGE_VERSION
|
||||
SCOPE_CONTAINER_NAME=weavescope
|
||||
SCOPE_APP_CONTAINER_NAME=weavescope-app
|
||||
IP_REGEXP="[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
|
||||
IP_ADDR_CMD="find /sys/class/net -type l | xargs -n1 basename | grep -vE 'docker|veth|lo' | \
|
||||
xargs -n1 ip addr show | grep inet | awk '{ print \$2 }' | grep -oE '$IP_REGEXP'"
|
||||
@@ -61,6 +64,17 @@ check_docker_version() {
|
||||
fi
|
||||
}
|
||||
|
||||
check_probe_only() {
|
||||
echo "${ARGS}" | grep -q -E "\-\-no\-app|\-\-service\-token|\-\-probe\-only"
|
||||
}
|
||||
|
||||
check_docker_for_mac() {
|
||||
docker_for_mac_network_mode="${HOME}/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/network"
|
||||
[ "$(uname)" = "Darwin" ] \
|
||||
&& [ -S /var/run/docker.sock ] \
|
||||
&& grep -q hybrid $docker_for_mac_network_mode 2>/dev/null
|
||||
}
|
||||
|
||||
# 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
|
||||
@@ -97,6 +111,13 @@ launch_command() {
|
||||
$WEAVESCOPE_DOCKER_ARGS $SCOPE_IMAGE --probe.docker=true "$@"
|
||||
}
|
||||
|
||||
launch_app_command() {
|
||||
echo docker run -d --name=$SCOPE_APP_CONTAINER_NAME \
|
||||
-e CHECKPOINT_DISABLE \
|
||||
-p 0.0.0.0:4040:4040 \
|
||||
$WEAVESCOPE_DOCKER_ARGS $SCOPE_IMAGE --no-probe "$@"
|
||||
}
|
||||
|
||||
check_docker_version
|
||||
|
||||
case "$COMMAND" in
|
||||
@@ -128,18 +149,38 @@ EOF
|
||||
;;
|
||||
|
||||
launch)
|
||||
check_not_running $SCOPE_CONTAINER_NAME $SCOPE_IMAGE_NAME
|
||||
docker rm -f $SCOPE_CONTAINER_NAME >/dev/null 2>&1 || true
|
||||
if ! check_docker_for_mac || check_probe_only ; then
|
||||
check_not_running $SCOPE_CONTAINER_NAME $SCOPE_IMAGE_NAME
|
||||
docker rm -f $SCOPE_CONTAINER_NAME >/dev/null 2>&1 || true
|
||||
CONTAINER=$($(launch_command "$@"))
|
||||
echo $CONTAINER
|
||||
elif check_docker_for_mac ; then
|
||||
# Docker for Mac (as of beta9) does not ship vmnet driver and
|
||||
# thereby only access container ports via a tunnel, preventing
|
||||
# access to host ports of the VM.
|
||||
# - https://github.com/weaveworks/scope/issues/1411
|
||||
# - https://forums.docker.com/t/ports-in-host-network-namespace-are-not-accessible/10789
|
||||
check_not_running $SCOPE_APP_CONTAINER_NAME $SCOPE_IMAGE_NAME
|
||||
docker rm -f $SCOPE_APP_CONTAINER_NAME >/dev/null 2>&1 || true
|
||||
CONTAINER=$($(launch_app_command "$@"))
|
||||
echo $CONTAINER
|
||||
app_ip=$(docker inspect -f '{{.NetworkSettings.IPAddress}}' "${CONTAINER}")
|
||||
check_not_running $SCOPE_CONTAINER_NAME $SCOPE_IMAGE_NAME
|
||||
docker rm -f $SCOPE_CONTAINER_NAME >/dev/null 2>&1 || true
|
||||
CONTAINER=$($(launch_command --no-app "$@" "${app_ip}:4040"))
|
||||
echo $CONTAINER
|
||||
fi
|
||||
|
||||
CONTAINER=$($(launch_command "$@"))
|
||||
echo $CONTAINER
|
||||
|
||||
if ! echo "$@" | grep -E "\-\-no\-app|\-\-service\-token" 1>/dev/null; then
|
||||
if ! check_probe_only ; then
|
||||
IP_ADDRS=$(docker run --rm --net=host --entrypoint /bin/sh $SCOPE_IMAGE -c "$IP_ADDR_CMD")
|
||||
echo "Weave Scope is reachable at the following URL(s):" >&2
|
||||
for ip in $IP_ADDRS; do
|
||||
echo " * http://$ip:4040/" >&2
|
||||
done
|
||||
if ! check_docker_for_mac ; then
|
||||
for ip in $IP_ADDRS; do
|
||||
echo " * http://$ip:4040/" >&2
|
||||
done
|
||||
else
|
||||
echo " * http://localhost:4040/" >&2
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
@@ -148,6 +189,11 @@ EOF
|
||||
if ! docker stop $SCOPE_CONTAINER_NAME >/dev/null 2>&1 ; then
|
||||
echo "Weave Scope is not running." >&2
|
||||
fi
|
||||
if check_docker_for_mac ; then
|
||||
if ! docker stop $SCOPE_APP_CONTAINER_NAME >/dev/null 2>&1 ; then
|
||||
echo "Weave Scope app is not running." >&2
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
|
||||
Reference in New Issue
Block a user