From 5c3e4cfa62452b9cd5c2c08bf081ab524ded1cb4 Mon Sep 17 00:00:00 2001 From: baude Date: Sat, 20 Jan 2018 11:07:35 -0600 Subject: Override hostname for container Adds the ability to override the container's hostname. Also, uses the first twelve characters of the container ID as the default hostname if none is provided. Signed-off-by: baude Closes: #248 Approved by: baude --- libpod/container_api.go | 20 ++++++++++++++++++++ libpod/container_internal.go | 5 +++++ test/podman_run_dns.bats | 9 +++++++++ 3 files changed, 34 insertions(+) diff --git a/libpod/container_api.go b/libpod/container_api.go index be7fd76bc..2b3c83eb2 100644 --- a/libpod/container_api.go +++ b/libpod/container_api.go @@ -90,6 +90,18 @@ func (c *Container) Init() (err error) { return errors.Wrapf(err, "unable to copy /etc/hosts to container space") } + if c.Spec().Hostname == "" { + id := c.ID() + if len(c.ID()) > 11 { + id = c.ID()[:12] + } + c.config.Spec.Hostname = id + } + runDirHostname, err := c.generateEtcHostname(c.config.Spec.Hostname) + if err != nil { + return errors.Wrapf(err, "unable to generate hostname file for container") + } + // Save OCI spec to disk g := generate.NewFromSpec(c.config.Spec) // If network namespace was requested, add it now @@ -122,6 +134,14 @@ func (c *Container) Init() (err error) { Options: []string{"rw", "bind"}, } g.AddMount(hostsMnt) + // Bind hostname + hostnameMnt := spec.Mount{ + Type: "bind", + Source: runDirHostname, + Destination: "/etc/hostname", + Options: []string{"rw", "bind"}, + } + g.AddMount(hostnameMnt) if c.config.User != "" { if !c.state.Mounted { diff --git a/libpod/container_internal.go b/libpod/container_internal.go index c052f61fe..9b785bfa5 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -508,3 +508,8 @@ func (c *Container) generateHosts() (string, error) { } return c.WriteStringToRundir("hosts", hosts) } + +// generateEtcHostname creates a containers /etc/hostname +func (c *Container) generateEtcHostname(hostname string) (string, error) { + return c.WriteStringToRundir("hostname", hostname) +} diff --git a/test/podman_run_dns.bats b/test/podman_run_dns.bats index bdb99dedd..d37737093 100644 --- a/test/podman_run_dns.bats +++ b/test/podman_run_dns.bats @@ -45,3 +45,12 @@ function setup() { echo "$output" [ "$status" -eq 0 ] } + +@test "test addition of hostname" { + run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --rm --hostname='foobar' ${ALPINE} cat /etc/hostname | grep foobar" + echo "$output" + [ "$status" -eq 0 ] + run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --rm --hostname='foobar' ${ALPINE} hostname | grep foobar" + echo "$output" + [ "$status" -eq 0 ] +} -- cgit v1.2.3-54-g00ecf