mirror of
https://github.com/containers/podman.git
synced 2025-12-15 19:49:29 +08:00
Merge pull request #13143 from Luap99/dns
append podman dns search domain
This commit is contained in:
@@ -2099,38 +2099,38 @@ func (c *Container) generateResolvConf() (string, error) {
|
|||||||
}
|
}
|
||||||
dnsServers := append(dns, c.config.DNSServer...)
|
dnsServers := append(dns, c.config.DNSServer...)
|
||||||
// If the user provided dns, it trumps all; then dns masq; then resolv.conf
|
// If the user provided dns, it trumps all; then dns masq; then resolv.conf
|
||||||
|
var search []string
|
||||||
switch {
|
switch {
|
||||||
case len(dnsServers) > 0:
|
case len(dnsServers) > 0:
|
||||||
|
|
||||||
// We store DNS servers as net.IP, so need to convert to string
|
// We store DNS servers as net.IP, so need to convert to string
|
||||||
for _, server := range dnsServers {
|
for _, server := range dnsServers {
|
||||||
nameservers = append(nameservers, server.String())
|
nameservers = append(nameservers, server.String())
|
||||||
}
|
}
|
||||||
case len(networkNameServers) > 0:
|
|
||||||
nameservers = append(nameservers, networkNameServers...)
|
|
||||||
default:
|
default:
|
||||||
// Make a new resolv.conf
|
// Make a new resolv.conf
|
||||||
nameservers = resolvconf.GetNameservers(resolv.Content)
|
// first add the nameservers from the networks status
|
||||||
// slirp4netns has a built in DNS server.
|
nameservers = append(nameservers, networkNameServers...)
|
||||||
|
// when we add network dns server we also have to add the search domains
|
||||||
|
search = networkSearchDomains
|
||||||
|
// slirp4netns has a built in DNS forwarder.
|
||||||
if c.config.NetMode.IsSlirp4netns() {
|
if c.config.NetMode.IsSlirp4netns() {
|
||||||
slirp4netnsDNS, err := GetSlirp4netnsDNS(c.slirp4netnsSubnet)
|
slirp4netnsDNS, err := GetSlirp4netnsDNS(c.slirp4netnsSubnet)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Warn("Failed to determine Slirp4netns DNS: ", err.Error())
|
logrus.Warn("Failed to determine Slirp4netns DNS: ", err.Error())
|
||||||
} else {
|
} else {
|
||||||
nameservers = append([]string{slirp4netnsDNS.String()}, nameservers...)
|
nameservers = append(nameservers, slirp4netnsDNS.String())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
nameservers = append(nameservers, resolvconf.GetNameservers(resolv.Content)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
var search []string
|
if len(c.config.DNSSearch) > 0 || len(c.runtime.config.Containers.DNSSearches) > 0 {
|
||||||
if len(c.config.DNSSearch) > 0 || len(c.runtime.config.Containers.DNSSearches) > 0 || len(networkSearchDomains) > 0 {
|
|
||||||
if !util.StringInSlice(".", c.config.DNSSearch) {
|
if !util.StringInSlice(".", c.config.DNSSearch) {
|
||||||
search = c.runtime.config.Containers.DNSSearches
|
search = append(search, c.runtime.config.Containers.DNSSearches...)
|
||||||
search = append(search, c.config.DNSSearch...)
|
search = append(search, c.config.DNSSearch...)
|
||||||
search = append(search, networkSearchDomains...)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
search = resolvconf.GetSearchDomains(resolv.Content)
|
search = append(search, resolvconf.GetSearchDomains(resolv.Content)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
var options []string
|
var options []string
|
||||||
|
|||||||
@@ -609,9 +609,27 @@ load helpers
|
|||||||
"8.8.8.8",
|
"8.8.8.8",
|
||||||
]
|
]
|
||||||
EOF
|
EOF
|
||||||
CONTAINERS_CONF=$containersconf run_podman run --rm $IMAGE grep "example.com" /etc/resolv.conf
|
|
||||||
CONTAINERS_CONF=$containersconf run_podman run --rm $IMAGE grep $searchIP /etc/resolv.conf
|
local nl="
|
||||||
is "$output" "nameserver $searchIP" "Should only be one $searchIP not multiple"
|
"
|
||||||
|
|
||||||
|
CONTAINERS_CONF=$containersconf run_podman run --rm $IMAGE cat /etc/resolv.conf
|
||||||
|
is "$output" "search example.com$nl.*" "correct seach domain"
|
||||||
|
is "$output" ".*nameserver 1.1.1.1${nl}nameserver $searchIP${nl}nameserver 1.0.0.1${nl}nameserver 8.8.8.8" "nameserver order is correct"
|
||||||
|
|
||||||
|
# create network with dns
|
||||||
|
local netname=testnet-$(random_string 10)
|
||||||
|
local subnet=$(random_rfc1918_subnet)
|
||||||
|
run_podman network create --subnet "$subnet.0/24" $netname
|
||||||
|
# custom server overwrites the network dns server
|
||||||
|
CONTAINERS_CONF=$containersconf run_podman run --network $netname --rm $IMAGE cat /etc/resolv.conf
|
||||||
|
is "$output" "search example.com$nl.*" "correct seach domain"
|
||||||
|
is "$output" ".*nameserver 1.1.1.1${nl}nameserver $searchIP${nl}nameserver 1.0.0.1${nl}nameserver 8.8.8.8" "nameserver order is correct"
|
||||||
|
|
||||||
|
# we should use the integrated dns server
|
||||||
|
run_podman run --network $netname --rm $IMAGE cat /etc/resolv.conf
|
||||||
|
is "$output" "search dns.podman.*" "correct seach domain"
|
||||||
|
is "$output" ".*nameserver $subnet.1.*" "integrated dns nameserver is set"
|
||||||
}
|
}
|
||||||
|
|
||||||
# vim: filetype=sh
|
# vim: filetype=sh
|
||||||
|
|||||||
Reference in New Issue
Block a user