diff --git a/libnetwork/drivers/bridge/bridge.go b/libnetwork/drivers/bridge/bridge.go index ecfd5d14c5..05d08683c6 100644 --- a/libnetwork/drivers/bridge/bridge.go +++ b/libnetwork/drivers/bridge/bridge.go @@ -989,7 +989,7 @@ func (d *driver) DeleteEndpoint(nid, eid string) error { d.Unlock() if !ok { - return types.NotFoundErrorf("network %s does not exist", nid) + return types.InternalMaskableErrorf("network %s does not exist", nid) } if n == nil { return driverapi.ErrNoNetwork(nid) @@ -1145,7 +1145,7 @@ func (d *driver) Leave(nid, eid string) error { network, err := d.getNetwork(nid) if err != nil { - return err + return types.InternalMaskableErrorf("%s", err) } endpoint, err := network.getEndpoint(eid) diff --git a/libnetwork/endpoint.go b/libnetwork/endpoint.go index 40459369f7..707006e33d 100644 --- a/libnetwork/endpoint.go +++ b/libnetwork/endpoint.go @@ -425,28 +425,32 @@ func (ep *endpoint) sbLeave(sbox Sandbox, options ...EndpointOption) error { ep.processOptions(options...) - ep.Lock() - ep.sandboxID = "" - ep.network = n - ep.Unlock() - - if err := n.getController().updateToStore(ep); err != nil { - ep.Lock() - ep.sandboxID = sid - ep.Unlock() - return err - } - d, err := n.driver() if err != nil { return fmt.Errorf("failed to leave endpoint: %v", err) } + ep.Lock() + ep.sandboxID = "" + ep.network = n + ep.Unlock() + if err := d.Leave(n.id, ep.id); err != nil { - return err + if _, ok := err.(types.MaskableError); !ok { + log.Warnf("driver error disconnecting container %s : %v", ep.name, err) + } } if err := sb.clearNetworkResources(ep); err != nil { + log.Warnf("Could not cleanup network resources on container %s disconnect: %v", ep.name, err) + } + + // Update the store about the sandbox detach only after we + // have completed sb.clearNetworkresources above to avoid + // spurious logs when cleaning up the sandbox when the daemon + // ungracefully exits and restarts before completing sandbox + // detach but after store has been updated. + if err := n.getController().updateToStore(ep); err != nil { return err }