Merge pull request #1982 from weaveworks/issues/578-pid-equals-host
Use --pid=host
This commit is contained in:
commit
f2ef5e880a
8 files changed
+18
-40
No files matched your search
+6
-7
@@ -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
|
||||
})
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
+2
-3
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 \
|
||||
|
||||
Reference in new issue
Block a user