Skip to content

Commit

Permalink
netavark: macvlan networks keep custom nameservers
Browse files Browse the repository at this point in the history
The change to use the custom dns server in aardvark-dns caused a
regression here because macvlan networks never returned the nameservers
in netavark and it also does not make sense to do so.

Instead check here if we got any network nameservers, if not we then use
the ones from the config if set otherwise fallback to host servers.

Fixes containers#19169

Signed-off-by: Paul Holzinger <[email protected]>
  • Loading branch information
Luap99 authored and ashley-cui committed Jul 13, 2023
1 parent 5583358 commit 9d0470f
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
6 changes: 3 additions & 3 deletions libpod/container_internal_common.go
Original file line number Diff line number Diff line change
Expand Up @@ -2077,12 +2077,12 @@ func (c *Container) addResolvConf() error {

// If NetworkBackend is `netavark` do not populate `/etc/resolv.conf`
// with custom dns server since after https://github.com/containers/netavark/pull/452
// netavark will always set required `nameservers` in statsBlock and libpod
// netavark will always set required `nameservers` in StatusBlock and libpod
// will correctly populate `networkNameServers`. Also see https://github.com/containers/podman/issues/16172

// Exception: Populate `/etc/resolv.conf` if container is not connected to any network
// ( i.e len(netStatus)==0 ) since in such case netavark is not invoked at all.
if networkBackend != string(types.Netavark) || len(netStatus) == 0 {
// with dns enabled then we do not get any nameservers back.
if networkBackend != string(types.Netavark) || len(networkNameServers) == 0 {
nameservers = append(nameservers, c.runtime.config.Containers.DNSServers...)
for _, ip := range c.config.DNSServer {
nameservers = append(nameservers, ip.String())
Expand Down
17 changes: 17 additions & 0 deletions test/e2e/run_networking_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1186,4 +1186,21 @@ EXPOSE 2004-2005/tcp`, ALPINE)
Expect(session).Should(Exit(0))
Expect(session.OutputToStringArray()).To(HaveLen(4), "output should only show link local address")
})

It("podman run with macvlan network", func() {
net := "mv-" + stringid.GenerateRandomID()
session := podmanTest.Podman([]string{"network", "create", "-d", "macvlan", "--subnet", "10.10.0.0/24", net})
session.WaitWithDefaultTimeout()
defer podmanTest.removeNetwork(net)
Expect(session).Should(Exit(0))

// use options and search to make sure we get the same resolv.conf everywhere
run := podmanTest.Podman([]string{"run", "--network", net, "--dns", "127.0.0.128",
"--dns-option", "ndots:1", "--dns-search", ".", ALPINE, "cat", "/etc/resolv.conf"})
run.WaitWithDefaultTimeout()
Expect(run).Should(Exit(0))
Expect(string(run.Out.Contents())).To(Equal(`nameserver 127.0.0.128
options ndots:1
`))
})
})

0 comments on commit 9d0470f

Please sign in to comment.