Bladeren bron

log an error if advertise is configured with a non-local ip-address

Signed-off-by: Madhu Venugopal <madhu@docker.com>
Madhu Venugopal 9 jaren geleden
bovenliggende
commit
5a0dbbd986
2 gewijzigde bestanden met toevoegingen van 24 en 1 verwijderingen
  1. 1 1
      libnetwork/controller.go
  2. 23 0
      libnetwork/drivers/overlay/overlay.go

+ 1 - 1
libnetwork/controller.go

@@ -178,7 +178,7 @@ func New(cfgOptions ...config.Option) (NetworkController, error) {
 		if err := c.initDiscovery(cfg.Cluster.Watcher); err != nil {
 			// Failing to initalize discovery is a bad situation to be in.
 			// But it cannot fail creating the Controller
-			log.Debugf("Failed to Initialize Discovery : %v", err)
+			log.Errorf("Failed to Initialize Discovery : %v", err)
 		}
 	}
 

+ 23 - 0
libnetwork/drivers/overlay/overlay.go

@@ -2,6 +2,7 @@ package overlay
 
 import (
 	"fmt"
+	"net"
 	"sync"
 
 	"github.com/Sirupsen/logrus"
@@ -120,8 +121,30 @@ func (d *driver) Type() string {
 	return networkType
 }
 
+func validateSelf(node string) error {
+	advIP := net.ParseIP(node)
+	if advIP == nil {
+		return fmt.Errorf("invalid self address (%s)", node)
+	}
+
+	addrs, err := net.InterfaceAddrs()
+	if err != nil {
+		return fmt.Errorf("Unable to get interface addresses %v", err)
+	}
+	for _, addr := range addrs {
+		ip, _, err := net.ParseCIDR(addr.String())
+		if err == nil && ip.Equal(advIP) {
+			return nil
+		}
+	}
+	return fmt.Errorf("Multi-Host overlay networking requires cluster-advertise(%s) to be configured with a local ip-address that is reachable within the cluster", advIP.String())
+}
+
 func (d *driver) nodeJoin(node string, self bool) {
 	if self && !d.isSerfAlive() {
+		if err := validateSelf(node); err != nil {
+			logrus.Errorf("%s", err.Error())
+		}
 		d.Lock()
 		d.bindAddress = node
 		d.Unlock()