diff --git a/libpod/container.go b/libpod/container.go index 7e71a44dd7..d97a683f60 100644 --- a/libpod/container.go +++ b/libpod/container.go @@ -1301,7 +1301,16 @@ func (c *Container) NetworkDisabled() (bool, error) { } func (c *Container) HostNetwork() bool { - if c.config.CreateNetNS || c.config.NetNsCtr != "" { + // If container shares network namespace with another container, check that container + if c.config.NetNsCtr != "" { + netNsCtr, err := c.runtime.state.Container(c.config.NetNsCtr) + if err != nil { + return false + } + return netNsCtr.HostNetwork() + } + + if c.config.CreateNetNS { return false } if c.config.Spec.Linux != nil { diff --git a/libpod/container_internal_common.go b/libpod/container_internal_common.go index af1542b829..6e9be81c0a 100644 --- a/libpod/container_internal_common.go +++ b/libpod/container_internal_common.go @@ -2427,6 +2427,7 @@ func (c *Container) addHosts() error { NetworkInterface: c.runtime.network, Exclude: exclude, PreferIP: preferIP, + HostNetwork: c.HostNetwork(), }) return etchosts.New(&etchosts.Params{ diff --git a/test/system/500-networking.bats b/test/system/500-networking.bats index b1d7c68ee2..be7fca8d03 100644 --- a/test/system/500-networking.bats +++ b/test/system/500-networking.bats @@ -773,6 +773,26 @@ nameserver 8.8.8.8" "nameserver order is correct" run_podman network rm -f $netname } +# https://github.com/containers/podman/issues/27823 +# bats test_tags=ci:parallel +@test "podman run --network=host uses localhost for host.containers.internal" { + run_podman run --rm --network=host $IMAGE cat /etc/hosts + assert "$output" =~ "127\.0\.0\.1[[:blank:]].*host\.containers\.internal" \ + "host.containers.internal should resolve to 127.0.0.1 with --network=host" +} + +# https://github.com/containers/podman/pull/27927 +# bats test_tags=ci:parallel +@test "podman run in pod with host network uses localhost for host.containers.internal" { + local podname="test-pod-hostnet-$(random_string 10)" + run_podman pod create --name $podname --network host + run_podman run --rm --pod $podname $IMAGE cat /etc/hosts + assert "$output" =~ "127\.0\.0\.1[[:blank:]].*host\.containers\.internal" \ + "host.containers.internal should resolve to 127.0.0.1 in pod with host network" + run_podman pod rm $podname +} + + # bats test_tags=ci:parallel @test "podman run port forward range" { # we run a long loop of tests lets run all combinations before bailing out