Selaa lähdekoodia

Reconcile persistent state after driver config

Reconciling persistent state after configuring driver. If not
the networks will not be initialized properly based on certain
driver config settings like enabling IP tables etc.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
Jana Radhakrishnan 9 vuotta sitten
vanhempi
commit
71207b575e
1 muutettua tiedostoa jossa 16 lisäystä ja 11 poistoa
  1. 16 11
      libnetwork/drivers/bridge/bridge.go

+ 16 - 11
libnetwork/drivers/bridge/bridge.go

@@ -338,16 +338,11 @@ func (c *networkConfiguration) conflictsWithNetworks(id string, others []*bridge
 }
 
 func (d *driver) configure(option map[string]interface{}) error {
-	var config *configuration
-	var err error
-
-	err = d.initStore(option)
-	if err != nil {
-		return err
-	}
-
-	d.Lock()
-	defer d.Unlock()
+	var (
+		config                *configuration
+		err                   error
+		natChain, filterChain *iptables.ChainInfo
+	)
 
 	genericData, ok := option[netlabel.GenericData]
 	if !ok || genericData == nil {
@@ -375,13 +370,23 @@ func (d *driver) configure(option map[string]interface{}) error {
 	}
 
 	if config.EnableIPTables {
-		d.natChain, d.filterChain, err = setupIPChains(config)
+		natChain, filterChain, err = setupIPChains(config)
 		if err != nil {
 			return err
 		}
 	}
 
+	d.Lock()
+	d.natChain = natChain
+	d.filterChain = filterChain
 	d.config = config
+	d.Unlock()
+
+	err = d.initStore(option)
+	if err != nil {
+		return err
+	}
+
 	return nil
 }