Skip to content

Commit 67f7e1e

Browse files
Merge pull request #17969 from TomSweeneyRedHat/dev/tsweeney/keepid
[v4.4.1-rhel] fix slirp4netns resolv.conf ip with a userns
2 parents 4461c9c + 62d3474 commit 67f7e1e

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

libpod/container_internal.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,8 @@ func (c *Container) completeNetworkSetup() error {
10051005
nameservers = append(nameservers, server.String())
10061006
}
10071007
}
1008+
nameservers = c.addSlirp4netnsDNS(nameservers)
1009+
10081010
// check if we have a bindmount for /etc/hosts
10091011
if hostsBindMount, ok := state.BindMounts[config.DefaultHostsFile]; ok {
10101012
entries, err := c.getHostsEntries()

libpod/container_internal_common.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2015,8 +2015,13 @@ func (c *Container) generateResolvConf() error {
20152015
keepHostServers = true
20162016
// first add the nameservers from the networks status
20172017
nameservers = networkNameServers
2018+
20182019
// slirp4netns has a built in DNS forwarder.
2019-
nameservers = c.addSlirp4netnsDNS(nameservers)
2020+
// If in userns the network is not setup here, instead we need to do that in
2021+
// c.completeNetworkSetup() which knows the actual slirp dns ip only at that point
2022+
if !c.config.PostConfigureNetNS {
2023+
nameservers = c.addSlirp4netnsDNS(nameservers)
2024+
}
20202025
}
20212026

20222027
// Set DNS search domains

test/system/500-networking.bats

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,18 @@ load helpers.network
196196
@test "podman run with slirp4ns adds correct dns address to resolv.conf" {
197197
CIDR="$(random_rfc1918_subnet)"
198198
run_podman run --rm --network slirp4netns:cidr="${CIDR}.0/24" \
199-
$IMAGE grep "${CIDR}" /etc/resolv.conf
200-
is "$output" "nameserver ${CIDR}.3" "resolv.conf should have slirp4netns cidr+3 as a nameserver"
199+
$IMAGE cat /etc/resolv.conf
200+
assert "$output" =~ "nameserver ${CIDR}.3" "resolv.conf should have slirp4netns cidr+3 as first nameserver"
201+
no_userns_out="$output"
202+
203+
if is_rootless; then
204+
# check the slirp ip also works correct with userns
205+
run_podman run --rm --userns keep-id --network slirp4netns:cidr="${CIDR}.0/24" \
206+
$IMAGE cat /etc/resolv.conf
207+
assert "$output" =~ "nameserver ${CIDR}.3" "resolv.conf should have slirp4netns cidr+3 as first nameserver with userns"
208+
assert "$output" == "$no_userns_out" "resolv.conf should look the same for userns"
209+
fi
210+
201211
}
202212

203213
@test "podman run with slirp4ns assigns correct ip address container" {

0 commit comments

Comments
 (0)