diff --git a/libnetwork/network.go b/libnetwork/network.go index 09a63615ee..71cbced580 100644 --- a/libnetwork/network.go +++ b/libnetwork/network.go @@ -1105,9 +1105,13 @@ func (n *network) getSvcRecords(ep *endpoint) []etchosts.Record { } var recs []etchosts.Record - sr, _ := n.ctrlr.svcRecords[n.id] + epName := ep.Name() + n.ctrlr.Lock() + sr, _ := n.ctrlr.svcRecords[n.id] + n.ctrlr.Unlock() + for h, ip := range sr.svcMap { if strings.Split(h, ".")[0] == epName { continue diff --git a/libnetwork/sandbox.go b/libnetwork/sandbox.go index 12efbb59a2..a4a8933e28 100644 --- a/libnetwork/sandbox.go +++ b/libnetwork/sandbox.go @@ -413,7 +413,12 @@ func (sb *sandbox) ResolveIP(ip string) string { for _, ep := range sb.getConnectedEndpoints() { n := ep.getNetwork() - sr, ok := n.getController().svcRecords[n.ID()] + c := n.getController() + + c.Lock() + sr, ok := c.svcRecords[n.ID()] + c.Unlock() + if !ok { continue } @@ -454,7 +459,12 @@ func (sb *sandbox) ResolveService(name string) ([]*net.SRV, []net.IP, error) { for _, ep := range sb.getConnectedEndpoints() { n := ep.getNetwork() - sr, ok := n.getController().svcRecords[n.ID()] + c := n.getController() + + c.Lock() + sr, ok := c.svcRecords[n.ID()] + c.Unlock() + if !ok { continue }