diff --git a/proxy/proxy.go b/proxy/proxy.go index fbe4993ae1..a927395e72 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -220,17 +220,29 @@ func (proxy *Proxy) listen(protoAndAddr string) (net.Listener, string, error) { } case "unix": + sockAddr := addr + if strings.HasPrefix(addr, "/var/run/") { + sockAddr = "/var/run/weave/" + strings.TrimPrefix(addr, "/var/run/") + } // remove socket from last invocation - if err := os.Remove(addr); err != nil && !os.IsNotExist(err) { + if err := os.Remove(sockAddr); err != nil && !os.IsNotExist(err) { return nil, "", err } - listener, err = net.Listen(proto, addr) + listener, err = net.Listen(proto, sockAddr) if err != nil { return nil, "", err } - if err = copyOwnerAndPermissions(dockerSock, addr); err != nil { + if err = copyOwnerAndPermissions(dockerSock, sockAddr); err != nil { return nil, "", err } + if strings.HasPrefix(sockAddr, "/var/run/weave/") { + if err := os.Remove(addr); err != nil && !os.IsNotExist(err) { + return nil, "", err + } + if err := os.Symlink(sockAddr, "/host"+addr); err != nil { + return nil, "", err + } + } default: Log.Fatalf("Invalid protocol format: %q", proto) diff --git a/weave b/weave index c0f29f2a7d..486697a718 100755 --- a/weave +++ b/weave @@ -1203,7 +1203,9 @@ launch_proxy() { PROXY_CONTAINER=$(docker run --privileged -d --name=$PROXY_CONTAINER_NAME --net=host \ $PROXY_VOLUMES \ -v "$CONTAINERS_PATH":"$CONTAINERS_PATH" \ - -v /var/run:/var/run \ + -v /var/run:/host/var/run \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /var/run/weave:/var/run/weave \ -v /proc:/hostproc \ -e PROCFS=/hostproc \ -e WEAVE_CIDR=none \ @@ -1211,6 +1213,7 @@ launch_proxy() { --entrypoint=/home/weave/weaveproxy \ $WEAVEPROXY_DOCKER_ARGS $EXEC_IMAGE $COVERAGE_ARGS $PROXY_ARGS) wait_for_log $PROXY_CONTAINER_NAME "proxy listening" + docker exec $PROXY_CONTAINER_NAME umount -l /host/var/run } ##########################################################################################