mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Better error messages when IP address autodetection fails
This fix tries to improve error messages when IP address autodetection fails, as is specified in 25141. Previously, error messages only indicate that multiple IPs exist when autodetection fails. In this fix, if one interface consists of multiple addresses or multiple interfaces consist of addresses, the error messages output the address names and interface names so that end user could take notice. This fix is verified manually. When multiple addresses exist on multiple interfaces: ``` $ sudo docker swarm init Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on different interfaces (192.168.186.128 on ens33 and 192.168.100.199 on eth10) - specify one with --advertise-addr ``` When multiple addresses exist on single interface: ``` $ sudo docker swarm init Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on interface ens33 (192.168.186.128 and 192.168.55.199) - specify one with --advertise-addr ``` This fix fixes 25141. Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This commit is contained in:
parent
b38c25ad41
commit
59db01049a
1 changed files with 7 additions and 5 deletions
|
@ -8,7 +8,6 @@ import (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
errNoSuchInterface = errors.New("no such interface")
|
errNoSuchInterface = errors.New("no such interface")
|
||||||
errMultipleIPs = errors.New("could not choose an IP address to advertise since this system has multiple addresses")
|
|
||||||
errNoIP = errors.New("could not find the system's IP address")
|
errNoIP = errors.New("could not find the system's IP address")
|
||||||
errMustSpecifyListenAddr = errors.New("must specify a listening address because the address to advertise is not recognized as a system address")
|
errMustSpecifyListenAddr = errors.New("must specify a listening address because the address to advertise is not recognized as a system address")
|
||||||
errBadListenAddr = errors.New("listen address must be an IP address or network interface (with optional port number)")
|
errBadListenAddr = errors.New("listen address must be an IP address or network interface (with optional port number)")
|
||||||
|
@ -159,6 +158,7 @@ func (c *Cluster) resolveSystemAddr() (net.IP, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var systemAddr net.IP
|
var systemAddr net.IP
|
||||||
|
var systemInterface net.Interface
|
||||||
|
|
||||||
// List Docker-managed subnets
|
// List Docker-managed subnets
|
||||||
v4Subnets := c.config.NetworkSubnetsProvider.V4Subnets()
|
v4Subnets := c.config.NetworkSubnetsProvider.V4Subnets()
|
||||||
|
@ -197,7 +197,7 @@ ifaceLoop:
|
||||||
}
|
}
|
||||||
|
|
||||||
if interfaceAddr4 != nil {
|
if interfaceAddr4 != nil {
|
||||||
return nil, errMultipleIPs
|
return nil, fmt.Errorf("could not choose an IP address to advertise since this system has multiple addresses on interface %s (%s and %s)", intf.Name, interfaceAddr4, ipAddr.IP)
|
||||||
}
|
}
|
||||||
|
|
||||||
interfaceAddr4 = ipAddr.IP
|
interfaceAddr4 = ipAddr.IP
|
||||||
|
@ -212,7 +212,7 @@ ifaceLoop:
|
||||||
}
|
}
|
||||||
|
|
||||||
if interfaceAddr6 != nil {
|
if interfaceAddr6 != nil {
|
||||||
return nil, errMultipleIPs
|
return nil, fmt.Errorf("could not choose an IP address to advertise since this system has multiple addresses on interface %s (%s and %s)", intf.Name, interfaceAddr6, ipAddr.IP)
|
||||||
}
|
}
|
||||||
|
|
||||||
interfaceAddr6 = ipAddr.IP
|
interfaceAddr6 = ipAddr.IP
|
||||||
|
@ -223,14 +223,16 @@ ifaceLoop:
|
||||||
// and exactly one IPv6 address, favor IPv4 over IPv6.
|
// and exactly one IPv6 address, favor IPv4 over IPv6.
|
||||||
if interfaceAddr4 != nil {
|
if interfaceAddr4 != nil {
|
||||||
if systemAddr != nil {
|
if systemAddr != nil {
|
||||||
return nil, errMultipleIPs
|
return nil, fmt.Errorf("could not choose an IP address to advertise since this system has multiple addresses on different interfaces (%s on %s and %s on %s)", systemAddr, systemInterface.Name, interfaceAddr4, intf.Name)
|
||||||
}
|
}
|
||||||
systemAddr = interfaceAddr4
|
systemAddr = interfaceAddr4
|
||||||
|
systemInterface = intf
|
||||||
} else if interfaceAddr6 != nil {
|
} else if interfaceAddr6 != nil {
|
||||||
if systemAddr != nil {
|
if systemAddr != nil {
|
||||||
return nil, errMultipleIPs
|
return nil, fmt.Errorf("could not choose an IP address to advertise since this system has multiple addresses on different interfaces (%s on %s and %s on %s)", systemAddr, systemInterface.Name, interfaceAddr6, intf.Name)
|
||||||
}
|
}
|
||||||
systemAddr = interfaceAddr6
|
systemAddr = interfaceAddr6
|
||||||
|
systemInterface = intf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue