From 48c2d8c458c2d911251d478885376b1906f215a0 Mon Sep 17 00:00:00 2001 From: Olli Janatuinen Date: Mon, 20 Oct 2025 15:35:30 +0000 Subject: [PATCH] libnetwork: support custom DNS servers in Windows overlay driver Signed-off-by: Olli Janatuinen --- .../windows/overlay/ov_endpoint_windows.go | 6 +++++ daemon/libnetwork/drivers/windows/windows.go | 25 ++++++++++++------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/daemon/libnetwork/drivers/windows/overlay/ov_endpoint_windows.go b/daemon/libnetwork/drivers/windows/overlay/ov_endpoint_windows.go index 14d5520fa5..706ea54539 100644 --- a/daemon/libnetwork/drivers/windows/overlay/ov_endpoint_windows.go +++ b/daemon/libnetwork/drivers/windows/overlay/ov_endpoint_windows.go @@ -124,12 +124,18 @@ func (d *driver) CreateEndpoint(ctx context.Context, nid, eid string, ifInfo dri // Todo: Add port bindings and qos policies here + dnsServerList, err := windows.ParseDNSServers(epOptions) + if err != nil { + return err + } + hnsEndpoint := &hcsshim.HNSEndpoint{ Name: eid, VirtualNetwork: n.hnsID, IPAddress: ep.addr.IP, EnableInternalDNS: true, GatewayAddress: s.gwIP.String(), + DNSServerList: dnsServerList, } if ep.mac != nil { diff --git a/daemon/libnetwork/drivers/windows/windows.go b/daemon/libnetwork/drivers/windows/windows.go index 361b9a48e5..73328b1e7c 100644 --- a/daemon/libnetwork/drivers/windows/windows.go +++ b/daemon/libnetwork/drivers/windows/windows.go @@ -610,14 +610,6 @@ func parseEndpointOptions(epOptions map[string]any) (*endpointOption, error) { } } - if opt, ok := epOptions[netlabel.DNSServers]; ok { - if dns, ok := opt.([]string); ok { - ec.DNSServers = dns - } else { - return nil, fmt.Errorf("Invalid endpoint configuration") - } - } - if opt, ok := epOptions[DisableICC]; ok { if disableICC, ok := opt.(bool); ok { ec.DisableICC = disableICC @@ -637,6 +629,17 @@ func parseEndpointOptions(epOptions map[string]any) (*endpointOption, error) { return ec, nil } +func ParseDNSServers(epOptions map[string]any) (string, error) { + if opt, ok := epOptions[netlabel.DNSServers]; ok { + if dns, ok := opt.([]string); ok { + return strings.Join(dns, ","), nil + } else { + return "", fmt.Errorf("Invalid endpoint configuration") + } + } + return "", nil +} + // ParseEndpointConnectivity parses options passed to CreateEndpoint, specifically port bindings, and store in a endpointConnectivity object. func ParseEndpointConnectivity(epOptions map[string]any) (*EndpointConnectivity, error) { if epOptions == nil { @@ -729,7 +732,11 @@ func (d *driver) CreateEndpoint(ctx context.Context, nid, eid string, ifInfo dri endpointStruct.IPAddress = ifInfo.Address().IP } - endpointStruct.DNSServerList = strings.Join(epOption.DNSServers, ",") + dnsServerList, err := ParseDNSServers(epOptions) + if err != nil { + return err + } + endpointStruct.DNSServerList = dnsServerList // overwrite the ep DisableDNS option if DisableGatewayDNS was set to true during the network creation option if n.config.DisableGatewayDNS {