diff --git a/daemon/daemon_windows.go b/daemon/daemon_windows.go index 7acc06c7f7..3dc8e09aeb 100644 --- a/daemon/daemon_windows.go +++ b/daemon/daemon_windows.go @@ -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()