summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2018-01-20 11:07:35 -0600
committerAtomic Bot <atomic-devel@projectatomic.io>2018-01-21 17:24:49 +0000
commit5c3e4cfa62452b9cd5c2c08bf081ab524ded1cb4 (patch)
treed259c5a6c689141a43fd4f9249b4aa7697d4e320
parent946b4ced544e5988a971da12c7e34a684ab0e39d (diff)
downloadpodman-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.go20
-rw-r--r--libpod/container_internal.go5
-rw-r--r--test/podman_run_dns.bats9
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 ]
+}