[proxy] use logs for getting proxy-env and proxy-config
It's ugly, but beats arg-parsing, inspecting the container and piecing the address together from exposed ports. We could just use the host from DOCKER_HOST, but that will fail in the case of a host with multiple IPs, where the proxy only listens on one.
This commit is contained in:
1 parent
fe6d05fccc
commit
2d5e362115
4 files changed
+51
-7
No files matched your search
+1
-1
@@ -108,7 +108,7 @@ func (proxy *Proxy) ListenAndServe() error {
|
||||
listener = tls.NewListener(listener, proxy.TLSConfig.Config)
|
||||
}
|
||||
|
||||
Info.Println("proxy listening")
|
||||
Info.Println("proxy listening on", proxy.ListenAddr)
|
||||
|
||||
return (&http.Server{Handler: proxy}).Serve(listener)
|
||||
}
|
||||
+12
-6
@@ -40,13 +40,18 @@ interfaces. This can be adjusted with the `-H` argument, e.g.
|
||||
|
||||
host1$ weave launch-proxy -H tcp://127.0.0.1:9999
|
||||
|
||||
All docker commands can be run via the proxy, so it is safe to
|
||||
globally adjust your `DOCKER_HOST` to point at the proxy, e.g.
|
||||
All docker commands can be run via the proxy, so it is safe to adjust
|
||||
your `DOCKER_HOST` to point at the proxy. Weave provides a convenient
|
||||
command for this:
|
||||
|
||||
host1$ export DOCKER_HOST=tcp://localhost:12375
|
||||
host1$ eval "$(weave proxy-env)"
|
||||
host1$ docker ps
|
||||
...
|
||||
|
||||
Alternatively, the proxy host can be set on a per-command basis with
|
||||
|
||||
host1$ docker $(weave proxy-config) ps
|
||||
|
||||
If you are working with a remote docker daemon, then `localhost` in
|
||||
the above needs to be replaced with the docker daemon host, and any
|
||||
firewalls inbetween need to be configured to permit access to
|
||||
@@ -137,12 +142,12 @@ to point at the latter:
|
||||
host1$ weave launch -iprange 10.2.3.0/24
|
||||
host1$ weave launch-dns 10.2.4.1/24
|
||||
host1$ weave launch-proxy --with-ipam --with-dns
|
||||
host1$ export DOCKER_HOST=tcp://localhost:12375
|
||||
host1$ eval "$(weave proxy-env)"
|
||||
|
||||
host2$ weave launch -iprange 10.2.3.0/24 host1
|
||||
host2$ weave launch-dns 10.2.4.2/24
|
||||
host2$ weave launch-proxy --with-ipam --with-dns
|
||||
host2$ export DOCKER_HOST=tcp://localhost:12375
|
||||
host1$ eval "$(weave proxy-env)"
|
||||
|
||||
NB: Note that the two weaveDNS instances must be given unique IPs, on
|
||||
a subnet different from that used for IP allocation.
|
||||
@@ -195,7 +200,8 @@ with
|
||||
|
||||
$ mkdir -pv ~/.docker
|
||||
$ cp -v {ca,cert,key}.pem ~/.docker
|
||||
$ export DOCKER_HOST=tcp://host1:12375 DOCKER_TLS_VERIFY=1
|
||||
$ eval "$(weave proxy-env)"
|
||||
$ export DOCKER_TLS_VERIFY=1
|
||||
$ docker version
|
||||
...
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#! /bin/bash
|
||||
|
||||
. ./config.sh
|
||||
|
||||
start_suite "Configure the docker daemon for the proxy"
|
||||
|
||||
weave_on $HOST1 launch-proxy
|
||||
|
||||
CMD="run -e WEAVE_CIDR=10.2.1.4/24 $BASE_IMAGE $CHECK_ETHWE_UP"
|
||||
assert_raises "eval '$(weave_on $HOST1 proxy-env)' ; docker $CMD"
|
||||
assert_raises "docker $(weave_on $HOST1 proxy-config) $CMD"
|
||||
|
||||
end_suite
|
||||
@@ -16,6 +16,8 @@ IMAGE_VERSION=${VERSION:-$IMAGE_VERSION}
|
||||
DOCKERHUB_USER=weaveworks
|
||||
BASE_EXEC_IMAGE=$DOCKERHUB_USER/weaveexec
|
||||
EXEC_IMAGE=$BASE_EXEC_IMAGE:$IMAGE_VERSION
|
||||
PROXY_HOST=${PROXY_HOST:-$(echo "${DOCKER_HOST#tcp://}" | cut -s -d: -f1)}
|
||||
PROXY_HOST=${PROXY_HOST:-127.0.0.1}
|
||||
|
||||
# Define some regular expressions for matching addresses.
|
||||
# The regexp here is far from precise, but good enough.
|
||||
@@ -41,6 +43,8 @@ usage() {
|
||||
echo "weave hide [<cidr> ...]"
|
||||
echo "weave ps [<container_id> ...]"
|
||||
echo "weave status"
|
||||
echo "weave proxy-env"
|
||||
echo "weave proxy-config"
|
||||
echo "weave version"
|
||||
echo "weave stop"
|
||||
echo "weave stop-dns"
|
||||
@@ -69,6 +73,7 @@ exec_remote() {
|
||||
-e WEAVE_PORT \
|
||||
-e WEAVE_CONTAINER_NAME \
|
||||
-e DOCKER_BRIDGE \
|
||||
-e PROXY_HOST="$PROXY_HOST" \
|
||||
$WEAVEEXEC_DOCKER_ARGS $EXEC_IMAGE --local "$@"
|
||||
}
|
||||
|
||||
@@ -171,6 +176,7 @@ MTU=65535
|
||||
PORT=${WEAVE_PORT:-6783}
|
||||
HTTP_PORT=6784
|
||||
DNS_HTTP_PORT=6785
|
||||
PROXY_PORT=12375
|
||||
PROXY_CONTAINER_NAME=weaveproxy
|
||||
|
||||
|
||||
@@ -805,6 +811,19 @@ proxy_args() {
|
||||
done
|
||||
}
|
||||
|
||||
proxy_addr() {
|
||||
if addr=$(docker logs weaveproxy | head -n3 | grep -oE "proxy listening on .*"); then
|
||||
addr=${addr##* }
|
||||
host=${addr%:*}
|
||||
[ "$host" = "0.0.0.0" ] && host=$PROXY_HOST
|
||||
port=${addr#*:}
|
||||
echo "${1}tcp://${host:-$PROXY_HOST}:${port:-$PROXY_PORT}"
|
||||
return 0
|
||||
fi
|
||||
echo "$PROXY_CONTAINER_NAME container is not present. Have you launched it?" >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
##########################################################################################
|
||||
|
||||
[ $(id -u) = 0 ] || {
|
||||
@@ -953,6 +972,12 @@ case "$COMMAND" in
|
||||
wait_for_log $PROXY_CONTAINER_NAME "proxy listening"
|
||||
echo $PROXY_CONTAINER
|
||||
;;
|
||||
proxy-env)
|
||||
proxy_addr "export DOCKER_HOST="
|
||||
;;
|
||||
proxy-config)
|
||||
proxy_addr "-H="
|
||||
;;
|
||||
connect)
|
||||
[ $# -gt 0 ] || usage
|
||||
if [ "$1" == "--replace" ]; then
|
||||
|
||||
Reference in new issue
Block a user