@@ -378,7 +378,7 @@ func (c *Container) NetworkDisconnect(nameOrID, netName string, force bool) erro
378
378
return err
379
379
}
380
380
381
- _ , nameExists := networks [netName ]
381
+ netOpts , nameExists := networks [netName ]
382
382
if ! nameExists && len (networks ) > 0 {
383
383
return fmt .Errorf ("container %s is not connected to network %s" , nameOrID , netName )
384
384
}
@@ -393,12 +393,20 @@ func (c *Container) NetworkDisconnect(nameOrID, netName string, force bool) erro
393
393
return err
394
394
}
395
395
396
+ // Since we removed the new network from the container db we must have to add it back during partial setup errors
397
+ addContainerNetworkToDB := func () {
398
+ if err := c .runtime .state .NetworkConnect (c , netName , netOpts ); err != nil {
399
+ logrus .Errorf ("Failed to add network %s for container %s to DB after failed network disconnect" , netName , nameOrID )
400
+ }
401
+ }
402
+
396
403
c .newNetworkEvent (events .NetworkDisconnect , netName )
397
404
if ! c .ensureState (define .ContainerStateRunning , define .ContainerStateCreated ) {
398
405
return nil
399
406
}
400
407
401
408
if c .state .NetNS == "" {
409
+ addContainerNetworkToDB ()
402
410
return fmt .Errorf ("unable to disconnect %s from %s: %w" , nameOrID , netName , define .ErrNoNetwork )
403
411
}
404
412
@@ -412,6 +420,7 @@ func (c *Container) NetworkDisconnect(nameOrID, netName string, force bool) erro
412
420
}
413
421
414
422
if err := c .runtime .teardownNetworkBackend (c .state .NetNS , opts ); err != nil {
423
+ addContainerNetworkToDB ()
415
424
return err
416
425
}
417
426
@@ -524,11 +533,20 @@ func (c *Container) NetworkConnect(nameOrID, netName string, netOpts types.PerNe
524
533
525
534
return err
526
535
}
536
+
537
+ // Since we added the new network to the container db we must have to remove it from that during partial setup errors
538
+ removeContainerNetworkFromDB := func () {
539
+ if err := c .runtime .state .NetworkDisconnect (c , netName ); err != nil {
540
+ logrus .Errorf ("Failed to remove network %s for container %s from DB after failed network connect" , netName , nameOrID )
541
+ }
542
+ }
543
+
527
544
c .newNetworkEvent (events .NetworkConnect , netName )
528
545
if ! c .ensureState (define .ContainerStateRunning , define .ContainerStateCreated ) {
529
546
return nil
530
547
}
531
548
if c .state .NetNS == "" {
549
+ removeContainerNetworkFromDB ()
532
550
return fmt .Errorf ("unable to connect %s to %s: %w" , nameOrID , netName , define .ErrNoNetwork )
533
551
}
534
552
@@ -543,6 +561,7 @@ func (c *Container) NetworkConnect(nameOrID, netName string, netOpts types.PerNe
543
561
544
562
results , err := c .runtime .setUpNetwork (c .state .NetNS , opts )
545
563
if err != nil {
564
+ removeContainerNetworkFromDB ()
546
565
return err
547
566
}
548
567
if len (results ) != 1 {
0 commit comments