diff --git a/daemon/cluster/cluster.go b/daemon/cluster/cluster.go index 7814b02167..76751bf199 100644 --- a/daemon/cluster/cluster.go +++ b/daemon/cluster/cluster.go @@ -498,8 +498,15 @@ func (c *Cluster) Join(req types.JoinRequest) error { select { case <-time.After(swarmConnectTimeout): - // attempt to connect will continue in background, also reconnecting - go c.reconnectOnFailure(n) + // attempt to connect will continue in background, but reconnect only if it didn't fail + go func() { + select { + case <-n.Ready(): + c.reconnectOnFailure(n) + case <-n.done: + logrus.Errorf("failed to join the cluster: %+v", c.err) + } + }() return ErrSwarmJoinTimeoutReached case <-n.Ready(): go c.reconnectOnFailure(n)