mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00
Use hosts public ip address in rootless containers
Add first non localhost ipv4 of all host interfaces as destination for host.contaners.internal for rootless containers. Fixes: https://github.com/containers/podman/issues/12000 Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
@ -2154,11 +2154,24 @@ func (c *Container) getHosts() string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if c.config.NetMode.IsSlirp4netns() {
|
} else if c.config.NetMode.IsSlirp4netns() {
|
||||||
gatewayIP, err := GetSlirp4netnsGateway(c.slirp4netnsSubnet)
|
// getLocalIP returns the non loopback local IP of the host
|
||||||
if err != nil {
|
getLocalIP := func() string {
|
||||||
logrus.Warn("Failed to determine gatewayIP: ", err.Error())
|
addrs, err := net.InterfaceAddrs()
|
||||||
} else {
|
if err != nil {
|
||||||
hosts += fmt.Sprintf("%s host.containers.internal\n", gatewayIP.String())
|
return ""
|
||||||
|
}
|
||||||
|
for _, address := range addrs {
|
||||||
|
// check the address type and if it is not a loopback the display it
|
||||||
|
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
||||||
|
if ipnet.IP.To4() != nil {
|
||||||
|
return ipnet.IP.String()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if ip := getLocalIP(); ip != "" {
|
||||||
|
hosts += fmt.Sprintf("%s\t%s\n", ip, "host.containers.internal")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logrus.Debug("Network configuration does not support host.containers.internal address")
|
logrus.Debug("Network configuration does not support host.containers.internal address")
|
||||||
|
@ -139,10 +139,11 @@ load helpers
|
|||||||
|
|
||||||
@test "podman run with slirp4ns assigns correct addresses to /etc/hosts" {
|
@test "podman run with slirp4ns assigns correct addresses to /etc/hosts" {
|
||||||
CIDR="$(random_rfc1918_subnet)"
|
CIDR="$(random_rfc1918_subnet)"
|
||||||
|
IP=$(hostname -I | cut -f 1 -d " ")
|
||||||
local conname=con-$(random_string 10)
|
local conname=con-$(random_string 10)
|
||||||
run_podman run --rm --network slirp4netns:cidr="${CIDR}.0/24" \
|
run_podman run --rm --network slirp4netns:cidr="${CIDR}.0/24" \
|
||||||
--name $conname --hostname $conname $IMAGE cat /etc/hosts
|
--name $conname --hostname $conname $IMAGE cat /etc/hosts
|
||||||
is "$output" ".*${CIDR}.2 host.containers.internal" "host.containers.internal should be the cidr+2 address"
|
is "$output" ".*${IP} host.containers.internal" "host.containers.internal should be the cidr+2 address"
|
||||||
is "$output" ".*${CIDR}.100 $conname $conname" "$conname should be the cidr+100 address"
|
is "$output" ".*${CIDR}.100 $conname $conname" "$conname should be the cidr+100 address"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user