Windows: Re-create custom NAT networks after restart if missing from HNS
@@ -264,6 +264,35 @@ func (daemon *Daemon) initNetworkController(activeSandboxes map[string]interface
}
if !found {
+ // non-default nat networks should be re-created if missing from HNS
+ if v.Type() == "nat" && v.Name() != "nat" {
+ _, _, v4Conf, v6Conf := v.Info().IpamConfig()
+ netOption := map[string]string{}
+ for k, v := range v.Info().DriverOptions() {
+ if k != winlibnetwork.NetworkName && k != winlibnetwork.HNSID {
+ netOption[k] = v
+ }
+ }
+ name := v.Name()
+ id := v.ID()
+
+ err = v.Delete()
+ if err != nil {
+ logrus.Errorf("Error occurred when removing network %v", err)
+ }
+
+ _, err := daemon.netController.NewNetwork("nat", name, id,
+ libnetwork.NetworkOptionGeneric(options.Generic{
+ netlabel.GenericData: netOption,
+ }),
+ libnetwork.NetworkOptionIpam("default", "", v4Conf, v6Conf, nil),
+ )
+ if err != nil {
+ logrus.Errorf("Error occurred when creating network %v", err)
+ }
+ continue
+ }
+
// global networks should not be deleted by local HNS
if v.Info().Scope() != datastore.GlobalScope {
err = v.Delete()
