@@ -406,7 +406,7 @@ func (ep *endpoint) sbJoin(sbox Sandbox, options ...EndpointOption) error {
406406
407407 ep .processOptions (options ... )
408408
409- driver , err := network .driver ()
409+ driver , err := network .driver (true )
410410 if err != nil {
411411 return fmt .Errorf ("failed to join endpoint: %v" , err )
412412 }
@@ -533,10 +533,10 @@ func (ep *endpoint) Leave(sbox Sandbox, options ...EndpointOption) error {
533533 sb .joinLeaveStart ()
534534 defer sb .joinLeaveEnd ()
535535
536- return ep .sbLeave (sbox , options ... )
536+ return ep .sbLeave (sbox , false , options ... )
537537}
538538
539- func (ep * endpoint ) sbLeave (sbox Sandbox , options ... EndpointOption ) error {
539+ func (ep * endpoint ) sbLeave (sbox Sandbox , force bool , options ... EndpointOption ) error {
540540 sb , ok := sbox .(* sandbox )
541541 if ! ok {
542542 return types .BadRequestErrorf ("not a valid Sandbox interface" )
@@ -565,7 +565,7 @@ func (ep *endpoint) sbLeave(sbox Sandbox, options ...EndpointOption) error {
565565
566566 ep .processOptions (options ... )
567567
568- d , err := n .driver ()
568+ d , err := n .driver (! force )
569569 if err != nil {
570570 return fmt .Errorf ("failed to leave endpoint: %v" , err )
571571 }
@@ -575,9 +575,11 @@ func (ep *endpoint) sbLeave(sbox Sandbox, options ...EndpointOption) error {
575575 ep .network = n
576576 ep .Unlock ()
577577
578- if err := d .Leave (n .id , ep .id ); err != nil {
579- if _ , ok := err .(types.MaskableError ); ! ok {
580- log .Warnf ("driver error disconnecting container %s : %v" , ep .name , err )
578+ if d != nil {
579+ if err := d .Leave (n .id , ep .id ); err != nil {
580+ if _ , ok := err .(types.MaskableError ); ! ok {
581+ log .Warnf ("driver error disconnecting container %s : %v" , ep .name , err )
582+ }
581583 }
582584 }
583585
@@ -649,7 +651,7 @@ func (ep *endpoint) Delete(force bool) error {
649651 }
650652
651653 if sb != nil {
652- if e := ep .sbLeave (sb ); e != nil {
654+ if e := ep .sbLeave (sb , force ); e != nil {
653655 log .Warnf ("failed to leave sandbox for endpoint %s : %v" , name , e )
654656 }
655657 }
@@ -681,7 +683,7 @@ func (ep *endpoint) Delete(force bool) error {
681683 // unwatch for service records
682684 n .getController ().unWatchSvcRecord (ep )
683685
684- if err = ep .deleteEndpoint (); err != nil && ! force {
686+ if err = ep .deleteEndpoint (force ); err != nil && ! force {
685687 return err
686688 }
687689
@@ -690,18 +692,22 @@ func (ep *endpoint) Delete(force bool) error {
690692 return nil
691693}
692694
693- func (ep * endpoint ) deleteEndpoint () error {
695+ func (ep * endpoint ) deleteEndpoint (force bool ) error {
694696 ep .Lock ()
695697 n := ep .network
696698 name := ep .name
697699 epid := ep .id
698700 ep .Unlock ()
699701
700- driver , err := n .driver ()
702+ driver , err := n .driver (! force )
701703 if err != nil {
702704 return fmt .Errorf ("failed to delete endpoint: %v" , err )
703705 }
704706
707+ if driver == nil {
708+ return nil
709+ }
710+
705711 if err := driver .DeleteEndpoint (n .id , epid ); err != nil {
706712 if _ , ok := err .(types.ForbiddenError ); ok {
707713 return err
@@ -913,7 +919,7 @@ func (ep *endpoint) assignAddressVersion(ipVer int, ipam ipamapi.Ipam) error {
913919 }
914920 }
915921 if progAdd != nil {
916- return types .BadRequestErrorf ("Invalid preferred address %s: It does not belong to any of this network's subnets" )
922+ return types .BadRequestErrorf ("Invalid preferred address %s: It does not belong to any of this network's subnets" , prefAdd )
917923 }
918924 return fmt .Errorf ("no available IPv%d addresses on this network's address pools: %s (%s)" , ipVer , n .Name (), n .ID ())
919925}
@@ -956,7 +962,7 @@ func (c *controller) cleanupLocalEndpoints() {
956962 }
957963
958964 for _ , ep := range epl {
959- if err := ep .Delete (false ); err != nil {
965+ if err := ep .Delete (true ); err != nil {
960966 log .Warnf ("Could not delete local endpoint %s during endpoint cleanup: %v" , ep .name , err )
961967 }
962968 }
0 commit comments