mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Added support for dns-search and fixes #30102
Signed-off-by: msabansal <sabansal@microsoft.com>
This commit is contained in:
parent
27695cd751
commit
e6962481a0
5 changed files with 35 additions and 9 deletions
|
@ -32,12 +32,22 @@ var (
|
||||||
getPortMapInfo = container.GetSandboxPortMapInfo
|
getPortMapInfo = container.GetSandboxPortMapInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (daemon *Daemon) getDNSSearchSettings(container *container.Container) []string {
|
||||||
|
if len(container.HostConfig.DNSSearch) > 0 {
|
||||||
|
return container.HostConfig.DNSSearch
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(daemon.configStore.DNSSearch) > 0 {
|
||||||
|
return daemon.configStore.DNSSearch
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
func (daemon *Daemon) buildSandboxOptions(container *container.Container) ([]libnetwork.SandboxOption, error) {
|
func (daemon *Daemon) buildSandboxOptions(container *container.Container) ([]libnetwork.SandboxOption, error) {
|
||||||
var (
|
var (
|
||||||
sboxOptions []libnetwork.SandboxOption
|
sboxOptions []libnetwork.SandboxOption
|
||||||
err error
|
err error
|
||||||
dns []string
|
dns []string
|
||||||
dnsSearch []string
|
|
||||||
dnsOptions []string
|
dnsOptions []string
|
||||||
bindings = make(nat.PortMap)
|
bindings = make(nat.PortMap)
|
||||||
pbList []types.PortBinding
|
pbList []types.PortBinding
|
||||||
|
@ -78,11 +88,7 @@ func (daemon *Daemon) buildSandboxOptions(container *container.Container) ([]lib
|
||||||
sboxOptions = append(sboxOptions, libnetwork.OptionDNS(d))
|
sboxOptions = append(sboxOptions, libnetwork.OptionDNS(d))
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(container.HostConfig.DNSSearch) > 0 {
|
dnsSearch := daemon.getDNSSearchSettings(container)
|
||||||
dnsSearch = container.HostConfig.DNSSearch
|
|
||||||
} else if len(daemon.configStore.DNSSearch) > 0 {
|
|
||||||
dnsSearch = daemon.configStore.DNSSearch
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, ds := range dnsSearch {
|
for _, ds := range dnsSearch {
|
||||||
sboxOptions = append(sboxOptions, libnetwork.OptionDNSSearch(ds))
|
sboxOptions = append(sboxOptions, libnetwork.OptionDNSSearch(ds))
|
||||||
|
|
|
@ -339,8 +339,10 @@ func (daemon *Daemon) initNetworkController(config *Config, activeSandboxes map[
|
||||||
name := v.Name
|
name := v.Name
|
||||||
|
|
||||||
// If there is no nat network create one from the first NAT network
|
// If there is no nat network create one from the first NAT network
|
||||||
// encountered
|
// encountered if it doesn't already exist
|
||||||
if !defaultNetworkExists && runconfig.DefaultDaemonNetworkMode() == containertypes.NetworkMode(strings.ToLower(v.Type)) {
|
if !defaultNetworkExists &&
|
||||||
|
runconfig.DefaultDaemonNetworkMode() == containertypes.NetworkMode(strings.ToLower(v.Type)) &&
|
||||||
|
n == nil {
|
||||||
name = runconfig.DefaultDaemonNetworkMode().NetworkName()
|
name = runconfig.DefaultDaemonNetworkMode().NetworkName()
|
||||||
defaultNetworkExists = true
|
defaultNetworkExists = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"github.com/docker/docker/container"
|
"github.com/docker/docker/container"
|
||||||
"github.com/docker/docker/layer"
|
"github.com/docker/docker/layer"
|
||||||
"github.com/docker/docker/libcontainerd"
|
"github.com/docker/docker/libcontainerd"
|
||||||
|
"github.com/docker/docker/pkg/system"
|
||||||
"golang.org/x/sys/windows/registry"
|
"golang.org/x/sys/windows/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -30,6 +31,14 @@ func (daemon *Daemon) getLibcontainerdCreateOptions(container *container.Contain
|
||||||
hvOpts.IsHyperV = container.HostConfig.Isolation.IsHyperV()
|
hvOpts.IsHyperV = container.HostConfig.Isolation.IsHyperV()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dnsSearch := daemon.getDNSSearchSettings(container)
|
||||||
|
if dnsSearch != nil {
|
||||||
|
osv := system.GetOSVersion()
|
||||||
|
if osv.Build < 14997 {
|
||||||
|
return nil, fmt.Errorf("dns-search option is not supported on the current platform")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Generate the layer folder of the layer options
|
// Generate the layer folder of the layer options
|
||||||
layerOpts := &libcontainerd.LayerOption{}
|
layerOpts := &libcontainerd.LayerOption{}
|
||||||
m, err := container.RWLayer.Metadata()
|
m, err := container.RWLayer.Metadata()
|
||||||
|
@ -149,7 +158,11 @@ func (daemon *Daemon) getLibcontainerdCreateOptions(container *container.Contain
|
||||||
createOptions = append(createOptions, hvOpts)
|
createOptions = append(createOptions, hvOpts)
|
||||||
createOptions = append(createOptions, layerOpts)
|
createOptions = append(createOptions, layerOpts)
|
||||||
if epList != nil {
|
if epList != nil {
|
||||||
createOptions = append(createOptions, &libcontainerd.NetworkEndpointsOption{Endpoints: epList, AllowUnqualifiedDNSQuery: AllowUnqualifiedDNSQuery})
|
createOptions = append(createOptions, &libcontainerd.NetworkEndpointsOption{
|
||||||
|
Endpoints: epList,
|
||||||
|
AllowUnqualifiedDNSQuery: AllowUnqualifiedDNSQuery,
|
||||||
|
DNSSearchList: dnsSearch,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return createOptions, nil
|
return createOptions, nil
|
||||||
|
|
|
@ -90,6 +90,7 @@ const defaultOwner = "docker"
|
||||||
// "SandboxPath": "C:\\\\control\\\\windowsfilter",
|
// "SandboxPath": "C:\\\\control\\\\windowsfilter",
|
||||||
// "HvPartition": true,
|
// "HvPartition": true,
|
||||||
// "EndpointList": ["e1bb1e61-d56f-405e-b75d-fd520cefa0cb"],
|
// "EndpointList": ["e1bb1e61-d56f-405e-b75d-fd520cefa0cb"],
|
||||||
|
// "DNSSearchList": "a.com,b.com,c.com",
|
||||||
// "HvRuntime": {
|
// "HvRuntime": {
|
||||||
// "ImagePath": "C:\\\\control\\\\windowsfilter\\\\65bf96e5760a09edf1790cb229e2dfb2dbd0fcdc0bf7451bae099106bfbfea0c\\\\UtilityVM"
|
// "ImagePath": "C:\\\\control\\\\windowsfilter\\\\65bf96e5760a09edf1790cb229e2dfb2dbd0fcdc0bf7451bae099106bfbfea0c\\\\UtilityVM"
|
||||||
// },
|
// },
|
||||||
|
@ -166,6 +167,9 @@ func (clnt *client) Create(containerID string, checkpoint string, checkpointDir
|
||||||
if n, ok := option.(*NetworkEndpointsOption); ok {
|
if n, ok := option.(*NetworkEndpointsOption); ok {
|
||||||
configuration.EndpointList = n.Endpoints
|
configuration.EndpointList = n.Endpoints
|
||||||
configuration.AllowUnqualifiedDNSQuery = n.AllowUnqualifiedDNSQuery
|
configuration.AllowUnqualifiedDNSQuery = n.AllowUnqualifiedDNSQuery
|
||||||
|
if n.DNSSearchList != nil {
|
||||||
|
configuration.DNSSearchList = strings.Join(n.DNSSearchList, ",")
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if c, ok := option.(*CredentialsOption); ok {
|
if c, ok := option.(*CredentialsOption); ok {
|
||||||
|
|
|
@ -59,6 +59,7 @@ type LayerOption struct {
|
||||||
type NetworkEndpointsOption struct {
|
type NetworkEndpointsOption struct {
|
||||||
Endpoints []string
|
Endpoints []string
|
||||||
AllowUnqualifiedDNSQuery bool
|
AllowUnqualifiedDNSQuery bool
|
||||||
|
DNSSearchList []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// CredentialsOption is a CreateOption that indicates the credentials from
|
// CredentialsOption is a CreateOption that indicates the credentials from
|
||||||
|
|
Loading…
Add table
Reference in a new issue