libpod: fix c.Hostname() to respect the utsNsCtr

When we lookup the hostname for a given container we have to check if
the container is joined to another utsns and use this hostname then
instead.
This fixes a problem where the `hostname` command would use the correct
name but /etc/hostname would contain a different name.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
Paul Holzinger 2022-04-19 16:22:39 +02:00
parent 696bcd2773
commit 128086639c
No known key found for this signature in database
GPG Key ID: EB145DD938A3CAF2
2 changed files with 15 additions and 2 deletions

View File

@ -628,6 +628,15 @@ func (c *Container) RuntimeName() string {
// Hostname gets the container's hostname
func (c *Container) Hostname() string {
if c.config.UTSNsCtr != "" {
utsNsCtr, err := c.runtime.GetContainer(c.config.UTSNsCtr)
if err != nil {
// should we return an error here?
logrus.Errorf("unable to lookup uts namespace for container %s: %v", c.ID(), err)
return ""
}
return utsNsCtr.Hostname()
}
if c.config.Spec.Hostname != "" {
return c.config.Spec.Hostname
}

View File

@ -142,7 +142,7 @@ load helpers
pid="$output"
run_podman run --pod $pod_name --name $con1_name $IMAGE cat /etc/hosts
is "$output" ".*\s$pod_name $infra_name.*" "Pod hostname in /etc/hosts"
is "$output" ".*127.0.0.1\s.*$con1_name.*" "Container1 name in /etc/hosts"
is "$output" ".*127.0.0.1\s$con1_name.*" "Container1 name in /etc/hosts"
# get the length of the hosts file
old_lines=${#lines[@]}
@ -150,9 +150,13 @@ load helpers
# new host entry and the old one should be removed (lines check)
run_podman run --pod $pod_name --name $con2_name $IMAGE cat /etc/hosts
is "$output" ".*\s$pod_name $infra_name.*" "Pod hostname in /etc/hosts"
is "$output" ".*127.0.0.1\s.*$con2_name.*" "Container2 name in /etc/hosts"
is "$output" ".*127.0.0.1\s$con2_name.*" "Container2 name in /etc/hosts"
is "${#lines[@]}" "$old_lines" "Number of hosts lines is equal"
run_podman run --pod $pod_name $IMAGE sh -c "hostname && cat /etc/hostname"
is "${lines[0]}" "$pod_name" "hostname is the pod hostname"
is "${lines[1]}" "$pod_name" "/etc/hostname contains correct pod hostname"
run_podman pod rm $pod_name
is "$output" "$pid" "Only ID in output (no extra errors)"
}