mirror of
https://github.com/containers/podman.git
synced 2025-10-25 18:25:59 +08:00
Ensure that user-specified HOSTNAME is honored
When adding the HOSTNAME environment variable, only do so if it is not already present in the spec. If it is already present, it was likely added by the user, and we should honor their requested value. Fixes #8886 Signed-off-by: Matthew Heon <mheon@redhat.com>
This commit is contained in:
@ -529,14 +529,37 @@ func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// Hostname handling:
|
||||
// If we have a UTS namespace, set Hostname in the OCI spec.
|
||||
// Set the HOSTNAME environment variable unless explicitly overridden by
|
||||
// the user (already present in OCI spec). If we don't have a UTS ns,
|
||||
// set it to the host's hostname instead.
|
||||
hostname := c.Hostname()
|
||||
foundUTS := false
|
||||
for _, i := range c.config.Spec.Linux.Namespaces {
|
||||
if i.Type == spec.UTSNamespace && i.Path == "" {
|
||||
hostname := c.Hostname()
|
||||
foundUTS = true
|
||||
g.SetHostname(hostname)
|
||||
g.AddProcessEnv("HOSTNAME", hostname)
|
||||
break
|
||||
}
|
||||
}
|
||||
if !foundUTS {
|
||||
tmpHostname, err := os.Hostname()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
hostname = tmpHostname
|
||||
}
|
||||
needEnv := true
|
||||
for _, checkEnv := range g.Config.Process.Env {
|
||||
if strings.SplitN(checkEnv, "=", 2)[0] == "HOSTNAME" {
|
||||
needEnv = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if needEnv {
|
||||
g.AddProcessEnv("HOSTNAME", hostname)
|
||||
}
|
||||
|
||||
if c.config.UTSNsCtr != "" {
|
||||
if err := c.addNamespaceContainer(&g, UTSNS, c.config.UTSNsCtr, spec.UTSNamespace); err != nil {
|
||||
|
||||
@ -364,7 +364,9 @@ func specConfigureNamespaces(s *specgen.SpecGenerator, g *generate.Generator, rt
|
||||
// namespaces?
|
||||
g.SetHostname(hostname)
|
||||
}
|
||||
if _, ok := s.Env["HOSTNAME"]; !ok && s.Hostname != "" {
|
||||
g.AddProcessEnv("HOSTNAME", hostname)
|
||||
}
|
||||
|
||||
// User
|
||||
switch s.UserNS.NSMode {
|
||||
|
||||
@ -1415,4 +1415,12 @@ WORKDIR /madethis`
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
Expect(session.ErrorToString()).To(ContainSubstring("Trying to pull"))
|
||||
})
|
||||
|
||||
It("podman run container with hostname and hostname environment variable", func() {
|
||||
hostnameEnv := "test123"
|
||||
session := podmanTest.Podman([]string{"run", "--hostname", "testctr", "--env", fmt.Sprintf("HOSTNAME=%s", hostnameEnv), ALPINE, "printenv", "HOSTNAME"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
Expect(session.OutputToString()).To(ContainSubstring(hostnameEnv))
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user