diff --git a/weaver/weave b/weaver/weave index b7fa02d7..1c52da6c 100755 --- a/weaver/weave +++ b/weaver/weave @@ -114,21 +114,23 @@ configure_container_networking() { NSPID=$DOCKERPID [ ! -d /var/run/netns ] && mkdir -p /var/run/netns - [ -f /var/run/netns/$NSPID ] && rm -f /var/run/netns/$NSPID + rm -f /var/run/netns/$NSPID ln -s /proc/$NSPID/ns/net /var/run/netns/$NSPID EXITCODE=1 LOCAL_IFNAME="v${CONTAINER_IFNAME}pl${NSPID}" GUEST_IFNAME="v${CONTAINER_IFNAME}pg${NSPID}" - if ip link add name $LOCAL_IFNAME mtu $MTU type veth peer name $GUEST_IFNAME mtu $MTU ; then - if ip link set $LOCAL_IFNAME master $BRIDGE && \ - ip link set $LOCAL_IFNAME up && \ - ip link set $GUEST_IFNAME netns $NSPID + IP_TMPFILE=/tmp/weave_ip_output_$$ + rm -f $IP_TMPFILE + if ip link add name $LOCAL_IFNAME mtu $MTU type veth peer name $GUEST_IFNAME mtu $MTU >$IP_TMPFILE 2>&1 ; then + if (ip link set $LOCAL_IFNAME master $BRIDGE && + ip link set $LOCAL_IFNAME up && + ip link set $GUEST_IFNAME netns $NSPID) >$IP_TMPFILE 2>&1 then - ip netns exec $NSPID ip link set $GUEST_IFNAME name $CONTAINER_IFNAME && \ - ip netns exec $NSPID ip addr add $2 dev $CONTAINER_IFNAME && \ - ip netns exec $NSPID ip link set $CONTAINER_IFNAME up && \ - (check_command_and_run ethtool ip netns exec $NSPID ethtool -K $3 tx off >/dev/null) && \ + (ip netns exec $NSPID ip link set $GUEST_IFNAME name $CONTAINER_IFNAME && + ip netns exec $NSPID ip addr add $2 dev $CONTAINER_IFNAME && + ip netns exec $NSPID ip link set $CONTAINER_IFNAME up && + check_command_and_run ethtool ip netns exec $NSPID ethtool -K $3 tx off >/dev/null) >$IP_TMPFILE 2>&1 && EXITCODE=0 else # failed before we assigned the veth to the container's namespace - delete it @@ -136,7 +138,17 @@ configure_container_networking() { fi fi - [ -f /var/run/netns/$NSPID ] && rm -f /var/run/netns/$NSPID + if [ "$EXITCODE" -ne 0 ] ; then + if ! ps -p $DOCKERPID >/dev/null 2>&1 ; then + echo "Container $1 died" >&2 + else + echo "Failure during network set-up:" >&2 + cat $IP_TMPFILE >&2 + fi + fi + + rm -f $IP_TMPFILE + rm -f /var/run/netns/$NSPID return $EXITCODE }