diff options
author | baude <bbaude@redhat.com> | 2018-01-20 11:07:35 -0600 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-01-21 17:24:49 +0000 |
commit | 5c3e4cfa62452b9cd5c2c08bf081ab524ded1cb4 (patch) | |
tree | d259c5a6c689141a43fd4f9249b4aa7697d4e320 | |
parent | 946b4ced544e5988a971da12c7e34a684ab0e39d (diff) | |
download | podman-5c3e4cfa62452b9cd5c2c08bf081ab524ded1cb4.tar.gz podman-5c3e4cfa62452b9cd5c2c08bf081ab524ded1cb4.tar.bz2 podman-5c3e4cfa62452b9cd5c2c08bf081ab524ded1cb4.zip |
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 <bbaude@redhat.com>
Closes: #248
Approved by: baude
-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 ] +} |