diff options
-rw-r--r-- | libpod/container_api.go | 20 | ||||
-rw-r--r-- | libpod/container_internal.go | 5 | ||||
-rw-r--r-- | test/podman_run_dns.bats | 9 |
3 files changed, 34 insertions, 0 deletions
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 ] +} |