mirror of https://github.com/containers/podman.git
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:
parent
696bcd2773
commit
128086639c
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)"
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue