From 95430cb5281ccffed6d05afcd89135063370193e Mon Sep 17 00:00:00 2001 From: Michael Bridgen Date: Wed, 19 Nov 2014 11:49:51 +0000 Subject: [PATCH] Make weaveDNS use the docker bridge IP instead of its own This means the `--dns` setting for containers will work even if the weavedns container is restarted (and assigned a new docker network IP). --- weave | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/weave b/weave index a3865eba..ebf8e723 100755 --- a/weave +++ b/weave @@ -46,6 +46,7 @@ MTU=65535 PORT=6783 HTTP_PORT=6784 DNS_HTTP_PORT=6785 +DOCKER_BRIDGE=${DOCKER_BRIDGE:-docker0} COMMAND=$1 @@ -139,6 +140,11 @@ destroy_bridge() { run_iptables -t nat -X WEAVE >/dev/null 2>&1 || true } +docker_bridge_ip() { + DOCKER_BRIDGE_IP=$(ip -4 addr show $DOCKER_BRIDGE | grep -o 'inet [.0-9]*') + DOCKER_BRIDGE_IP=${DOCKER_BRIDGE_IP#inet } +} + # the following borrows from https://github.com/jpetazzo/pipework # run args $2 $3 ... as a command in the network namespace of container $1 @@ -369,7 +375,8 @@ case "$COMMAND" in shift 1 check_not_running $DNS_CONTAINER_NAME $DNS_IMAGE create_bridge - CONTAINER=$(docker run --privileged -d --name=$DNS_CONTAINER_NAME -v /var/run/docker.sock:/var/run/docker.sock $DNS_IMAGE "$@" | tail -n 1) + docker_bridge_ip + CONTAINER=$(docker run --privileged -d --name=$DNS_CONTAINER_NAME -p $DOCKER_BRIDGE_IP:53:53/udp -v /var/run/docker.sock:/var/run/docker.sock $DNS_IMAGE "$@" | tail -n 1) with_container_netns $CONTAINER attach $CIDR >/dev/null echo $CONTAINER ;; @@ -407,7 +414,8 @@ case "$COMMAND" in CIDR=$1 shift 1 create_bridge - DNS_ARG=$(docker inspect --format '--dns {{ .NetworkSettings.IPAddress }}'" --link $DNS_CONTAINER_NAME:$DNS_CONTAINER_NAME" $DNS_CONTAINER_NAME 2>/dev/null) || true + docker_bridge_ip + DNS_ARG="--dns $DOCKER_BRIDGE_IP" DNS_SEARCH_ARG="--dns-search=." for arg in $@; do case $arg in