From f28ad350bdd82c7b60a990b37a513233b30b92f7 Mon Sep 17 00:00:00 2001 From: Paul Bellamy Date: Fri, 20 Nov 2015 12:39:57 +0000 Subject: [PATCH] make weave and the proxy work with tcp-only dockers via DOCKER_HOST --- common/docker/client.go | 8 ++++++++ prog/weaver/main.go | 8 +++++++- weave | 16 ++++++++++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/common/docker/client.go b/common/docker/client.go index bd4b78f6..0a823690 100644 --- a/common/docker/client.go +++ b/common/docker/client.go @@ -2,6 +2,8 @@ package docker import ( "errors" + "strings" + "github.com/fsouza/go-dockerclient" . "github.com/weaveworks/weave/common" @@ -19,6 +21,9 @@ type Client struct { // NewClient creates a new Docker client and checks we can talk to Docker func NewClient(apiPath string) (*Client, error) { + if apiPath != "" && !strings.Contains(apiPath, "://") { + apiPath = "tcp://" + apiPath + } dc, err := docker.NewClient(apiPath) if err != nil { return nil, err @@ -29,6 +34,9 @@ func NewClient(apiPath string) (*Client, error) { } func NewVersionedClient(apiPath string, apiVersionString string) (*Client, error) { + if !strings.Contains(apiPath, "://") { + apiPath = "tcp://" + apiPath + } dc, err := docker.NewVersionedClient(apiPath, apiVersionString) if err != nil { return nil, err diff --git a/prog/weaver/main.go b/prog/weaver/main.go index 51acd0c3..a4ff46e8 100644 --- a/prog/weaver/main.go +++ b/prog/weaver/main.go @@ -70,8 +70,14 @@ func main() { iface *net.Interface datapathName string trustedSubnetStr string + + defaultDockerHost = "unix:///var/run/docker.sock" ) + if val := os.Getenv("DOCKER_HOST"); val != "" { + defaultDockerHost = val + } + mflag.BoolVar(&justVersion, []string{"#version", "-version"}, false, "print version and exit") mflag.BoolVar(&createDatapath, []string{"-create-datapath"}, false, "create ODP datapath and exit") mflag.BoolVar(&deleteDatapath, []string{"-delete-datapath"}, false, "delete ODP datapath and exit") @@ -93,7 +99,7 @@ func main() { mflag.StringVar(&iprangeCIDR, []string{"#iprange", "#-iprange", "-ipalloc-range"}, "", "IP address range reserved for automatic allocation, in CIDR notation") mflag.StringVar(&ipsubnetCIDR, []string{"#ipsubnet", "#-ipsubnet", "-ipalloc-default-subnet"}, "", "subnet to allocate within by default, in CIDR notation") mflag.IntVar(&peerCount, []string{"#initpeercount", "#-initpeercount", "-init-peer-count"}, 0, "number of peers in network (for IP address allocation)") - mflag.StringVar(&dockerAPI, []string{"#api", "#-api", "-docker-api"}, "", "Docker API endpoint, e.g. unix:///var/run/docker.sock") + mflag.StringVar(&dockerAPI, []string{"#api", "#-api", "-docker-api"}, defaultDockerHost, "Docker API endpoint") mflag.BoolVar(&noDNS, []string{"-no-dns"}, false, "disable DNS server") mflag.StringVar(&dnsDomain, []string{"-dns-domain"}, nameserver.DefaultDomain, "local domain to server requests for") mflag.StringVar(&dnsListenAddress, []string{"-dns-listen-address"}, nameserver.DefaultListenAddress, "address to listen on for DNS requests") diff --git a/weave b/weave index 27abdf1f..01becaf2 100755 --- a/weave +++ b/weave @@ -97,15 +97,19 @@ usage() { } docker_sock() { + if [ -z "$DOCKER_HOST" ]; then + echo "/var/run/docker.sock" + return + fi if echo "$DOCKER_HOST" | grep -q "^unix://" >/dev/null; then echo "${DOCKER_HOST#unix://}" - else - echo "/var/run/docker.sock" fi } docker_sock_volume_mount() { - echo "-v $(docker_sock):$(docker_sock) -e DOCKER_HOST=unix://$(docker_sock)" + if [ -n "$(docker_sock)" ]; then + echo "-v $(docker_sock):$(docker_sock)" + fi } exec_remote() { @@ -125,6 +129,7 @@ exec_remote() { -e WEAVE_NO_FASTDP \ -e WEAVE_NO_BRIDGED_FASTDP \ -e WEAVE_NO_PLUGIN \ + -e DOCKER_HOST \ -e DOCKER_BRIDGE \ -e DOCKER_CLIENT_HOST="$DOCKER_CLIENT_HOST" \ -e DOCKER_CLIENT_ARGS \ @@ -1624,6 +1629,7 @@ launch_router() { $(docker_sock_volume_mount) \ -p $PORT:$CONTAINER_PORT/tcp -p $PORT:$CONTAINER_PORT/udp \ ${NETHOST_OPT:-$DNS_PORT_MAPPING} \ + -e DOCKER_HOST \ -e WEAVE_PASSWORD \ -e WEAVE_CIDR=none \ $WEAVE_DOCKER_ARGS $IMAGE $COVERAGE_ARGS \ @@ -1633,7 +1639,7 @@ launch_router() { --dns-effective-listen-address $DOCKER_BRIDGE_IP \ ${NETHOST_OPT:+$DNS_ROUTER_OPTS} $NO_DNS_OPT \ --http-addr $HTTP_IP:$HTTP_PORT \ - --docker-api "unix://$(docker_sock)" "$@") + "$@") with_container_netns_or_die $CONTAINER_NAME setup_router_iface_$BRIDGE_TYPE attach_router } @@ -1683,6 +1689,7 @@ launch_proxy() { -v /proc:/hostproc \ -e PROCFS=/hostproc \ -e WEAVE_CIDR=none \ + -e DOCKER_HOST \ -e DOCKER_BRIDGE \ -e WEAVE_DEBUG \ -e COVERAGE \ @@ -1703,6 +1710,7 @@ launch_plugin() { --net=host \ $(docker_sock_volume_mount) \ -v /run/docker/plugins:/run/docker/plugins \ + -e DOCKER_HOST \ $PLUGIN_IMAGE "$@") }