diff --git a/libnetwork/drivers/overlay/overlay.go b/libnetwork/drivers/overlay/overlay.go index 7f20840db2..88e1010c43 100644 --- a/libnetwork/drivers/overlay/overlay.go +++ b/libnetwork/drivers/overlay/overlay.go @@ -48,6 +48,7 @@ type driver struct { vxlanIdm *idm.Idm once sync.Once joinOnce sync.Once + localJoinOnce sync.Once keys []*key sync.Mutex } @@ -241,6 +242,12 @@ func (d *driver) nodeJoin(advertiseAddress, bindAddress string, self bool) { d.bindAddress = bindAddress d.Unlock() + // If containers are already running on this network update the + // advertiseaddress in the peerDB + d.localJoinOnce.Do(func() { + d.peerDBUpdateSelf() + }) + // If there is no cluster store there is no need to start serf. if d.store != nil { if err := validateSelf(advertiseAddress); err != nil { diff --git a/libnetwork/drivers/overlay/peerdb.go b/libnetwork/drivers/overlay/peerdb.go index 92817a1a98..adc370ff0f 100644 --- a/libnetwork/drivers/overlay/peerdb.go +++ b/libnetwork/drivers/overlay/peerdb.go @@ -367,3 +367,12 @@ func (d *driver) pushLocalDb() { return false }) } + +func (d *driver) peerDBUpdateSelf() { + d.peerDbWalk(func(nid string, pkey *peerKey, pEntry *peerEntry) bool { + if pEntry.isLocal { + pEntry.vtep = net.ParseIP(d.advertiseAddress) + } + return false + }) +}