diff --git a/common/utils.go b/common/utils.go index ce9e09e3..5aa93219 100644 --- a/common/utils.go +++ b/common/utils.go @@ -1,7 +1,6 @@ package common import ( - "fmt" "github.com/vishvananda/netlink" "github.com/vishvananda/netns" "net" @@ -49,10 +48,10 @@ type NetDev struct { } // Search the network namespace of a process for interfaces matching a predicate -func FindNetDevs(procPath string, processID int, match func(string) bool) ([]NetDev, error) { +func FindNetDevs(processID int, match func(string) bool) ([]NetDev, error) { var netDevs []NetDev - ns, err := netns.GetFromPath(fmt.Sprintf("%s/%d/ns/net", procPath, processID)) + ns, err := netns.GetFromPid(processID) if err != nil { return nil, err } @@ -84,15 +83,15 @@ func FindNetDevs(procPath string, processID int, match func(string) bool) ([]Net } // Lookup the weave interface of a container -func GetWeaveNetDevs(procPath string, processID int) ([]NetDev, error) { - return FindNetDevs(procPath, processID, func(name string) bool { +func GetWeaveNetDevs(processID int) ([]NetDev, error) { + return FindNetDevs(processID, func(name string) bool { return strings.HasPrefix(name, "ethwe") }) } // Get the weave bridge interface -func GetBridgeNetDev(procPath, bridgeName string) ([]NetDev, error) { - return FindNetDevs(procPath, 1, func(name string) bool { +func GetBridgeNetDev(bridgeName string) ([]NetDev, error) { + return FindNetDevs(1, func(name string) bool { return name == bridgeName }) } diff --git a/prog/weaveproxy/main.go b/prog/weaveproxy/main.go index 78be8f28..47ad90b3 100644 --- a/prog/weaveproxy/main.go +++ b/prog/weaveproxy/main.go @@ -68,7 +68,6 @@ func main() { c.Image = getenv("EXEC_IMAGE", "weaveworks/weaveexec") c.DockerBridge = getenv("DOCKER_BRIDGE", "docker0") c.DockerHost = getenv("DOCKER_HOST", "unix:///var/run/docker.sock") - c.ProcPath = getenv("PROCFS", "/proc") p, err := proxy.NewProxy(c) if err != nil { diff --git a/prog/weaveutil/addrs.go b/prog/weaveutil/addrs.go index ddd0de62..4fc38575 100644 --- a/prog/weaveutil/addrs.go +++ b/prog/weaveutil/addrs.go @@ -12,15 +12,13 @@ func containerAddrs(args []string) error { } bridgeName := args[0] - procPath := procDir() - c, err := docker.NewVersionedClientFromEnv("1.18") if err != nil { return err } for _, containerID := range args[1:] { - netDevs, err := getNetDevs(procPath, bridgeName, c, containerID) + netDevs, err := getNetDevs(bridgeName, c, containerID) if err != nil { if _, ok := err.(*docker.NoSuchContainer); ok { continue @@ -41,9 +39,9 @@ func containerAddrs(args []string) error { return nil } -func getNetDevs(procPath, bridgeName string, c *docker.Client, containerID string) ([]common.NetDev, error) { +func getNetDevs(bridgeName string, c *docker.Client, containerID string) ([]common.NetDev, error) { if containerID == "weave:expose" { - return common.GetBridgeNetDev(procPath, bridgeName) + return common.GetBridgeNetDev(bridgeName) } container, err := c.InspectContainer(containerID) @@ -51,5 +49,5 @@ func getNetDevs(procPath, bridgeName string, c *docker.Client, containerID strin return nil, err } - return common.GetWeaveNetDevs(procPath, container.State.Pid) + return common.GetWeaveNetDevs(container.State.Pid) } diff --git a/prog/weaveutil/docker_tls_args.go b/prog/weaveutil/docker_tls_args.go index 9f889657..83dff5ec 100644 --- a/prog/weaveutil/docker_tls_args.go +++ b/prog/weaveutil/docker_tls_args.go @@ -1,6 +1,4 @@ // docker_tls_args: find the docker daemon's tls args -// This reimplements pgrep, because pgrep will only look in /proc, but not in -// $PROCFS. package main import ( @@ -16,7 +14,7 @@ func dockerTLSArgs(args []string) error { if len(args) > 0 { cmdUsage("docker-tls-args", "") } - procRoot := procDir() + procRoot := "/proc" dirEntries, err := ioutil.ReadDir(procRoot) if err != nil { return err diff --git a/prog/weaveutil/main.go b/prog/weaveutil/main.go index 8522f824..1d737341 100644 --- a/prog/weaveutil/main.go +++ b/prog/weaveutil/main.go @@ -60,11 +60,3 @@ func cmdUsage(cmd string, usage string) { fmt.Fprintf(os.Stderr, "usage: weaveutil %s %s\n", cmd, usage) os.Exit(1) } - -func procDir() string { - procDir := os.Getenv("PROCFS") - if procDir == "" { - procDir = "/proc" - } - return procDir -} diff --git a/proxy/common.go b/proxy/common.go index 0bc2b28a..cd827e54 100644 --- a/proxy/common.go +++ b/proxy/common.go @@ -27,7 +27,6 @@ func callWeave(args ...string) ([]byte, []byte, error) { cmd := exec.Command("./weave", args...) cmd.Env = []string{ "PATH=/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", - "PROCFS=/hostproc", } propagateEnv := func(key string) { diff --git a/proxy/proxy.go b/proxy/proxy.go index a287cc8f..396e57a1 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -64,7 +64,6 @@ type Config struct { NoMulticastRoute bool DockerBridge string DockerHost string - ProcPath string } type wait struct { @@ -149,7 +148,7 @@ func NewProxy(c Config) (*Proxy, error) { p.client = client.Client if !p.WithoutDNS { - netDevs, err := GetBridgeNetDev(c.ProcPath, c.DockerBridge) + netDevs, err := GetBridgeNetDev(c.DockerBridge) if err != nil { return nil, err } @@ -583,7 +582,7 @@ func (proxy *Proxy) updateContainerNetworkSettings(container jsonObject) error { if err := proxy.waitForStartByIdent(containerID); err != nil { return err } - netDevs, err := GetWeaveNetDevs(proxy.ProcPath, pid) + netDevs, err := GetWeaveNetDevs(pid) if err != nil || len(netDevs) == 0 || len(netDevs[0].CIDRs) == 0 { return err } diff --git a/weave b/weave index f899d5fc..6364bcfd 100755 --- a/weave +++ b/weave @@ -110,9 +110,7 @@ docker_sock_options() { } exec_remote() { - docker $DOCKER_CLIENT_ARGS run --rm --privileged --net=host $(docker_sock_options) \ - -v /proc:/hostproc \ - -e PROCFS=/hostproc \ + docker $DOCKER_CLIENT_ARGS run --rm --privileged --net=host --pid=host $(docker_sock_options) \ -e DOCKERHUB_USER="$DOCKERHUB_USER" \ -e WEAVE_VERSION \ -e WEAVE_DEBUG \ @@ -342,7 +340,6 @@ PLUGIN_IMAGE=$BASE_PLUGIN_IMAGE:$IMAGE_VERSION PLUGIN_CONTAINER_NAME=weaveplugin VOLUMES_CONTAINER_NAME=weavevolumes-$IMAGE_VERSION -PROCFS=${PROCFS:-/proc} DOCKER_BRIDGE=${DOCKER_BRIDGE:-docker0} CONTAINER_NAME=${WEAVE_CONTAINER_NAME:-weave} BRIDGE=weave @@ -466,8 +463,7 @@ util_op() { if command_exists weaveutil ; then weaveutil "$@" else - docker run --rm --privileged --net=host $(docker_sock_options) \ - -v /proc:/hostproc -e PROCFS=/hostproc \ + docker run --rm --privileged --net=host --pid=host $(docker_sock_options) \ --entrypoint=/usr/bin/weaveutil $EXEC_IMAGE "$@" fi } @@ -746,7 +742,7 @@ with_container_netns() { exit 1 fi - CONTAINER_NETNS=$PROCFS/$CONTAINER_PID/ns/net + CONTAINER_NETNS=/proc/$CONTAINER_PID/ns/net LOCAL_IFNAME="v${CONTAINER_IFNAME}pl${CONTAINER_PID}" GUEST_IFNAME="v${CONTAINER_IFNAME}pg${CONTAINER_PID}" IP_TMPOUT=/tmp/weave_ip_out_$$ @@ -758,7 +754,7 @@ with_container_netns() { shift 1 if ! "$@" >$IP_TMPOUT 2>$IP_TMPERR ; then STATUS=1 - if [ ! -d $PROCFS/$CONTAINER_PID ] ; then + if [ ! -d /proc/$CONTAINER_PID ] ; then echo "Container $CONTAINER died" >&2 else echo "Failure during network configuration for container $CONTAINER:" >&2 @@ -1678,12 +1674,10 @@ launch_proxy() { --label=weavevolumes --entrypoint=/bin/false $EXEC_IMAGE >/dev/null fi start_if_necessary proxy $PROXY_CONTAINER_NAME $EXEC_IMAGE \ - --privileged --net=host $(docker_sock_options) \ + --privileged --net=host --pid=host $(docker_sock_options) \ $PROXY_VOLUMES \ --volumes-from $VOLUMES_CONTAINER_NAME \ -v /var/run/weave:/var/run/weave \ - -v /proc:/hostproc \ - -e PROCFS=/hostproc \ -e DOCKER_BRIDGE \ -e WEAVE_DEBUG \ -e COVERAGE \