diff --git a/.changelog/10823.txt b/.changelog/10823.txt new file mode 100644 index 000000000..76535fae2 --- /dev/null +++ b/.changelog/10823.txt @@ -0,0 +1,3 @@ +```release-note:bug +docker: Moved the generated `/etc/hosts` file's mount source to the allocation directory so that it can be shared between tasks of an allocation. +``` diff --git a/drivers/docker/driver.go b/drivers/docker/driver.go index 1f567ba5b..968223460 100644 --- a/drivers/docker/driver.go +++ b/drivers/docker/driver.go @@ -962,7 +962,7 @@ func (d *Driver) createContainerConfig(task *drivers.TaskConfig, driverConfig *T // that comes from the pause container if task.NetworkIsolation != nil && driverConfig.NetworkMode == "" { etcHostMount, err := hostnames.GenerateEtcHostsMount( - task.TaskDir().Dir, task.NetworkIsolation, driverConfig.ExtraHosts) + task.AllocDir, task.NetworkIsolation, driverConfig.ExtraHosts) if err != nil { return c, fmt.Errorf("failed to build mount for /etc/hosts: %v", err) } diff --git a/drivers/shared/hostnames/mount.go b/drivers/shared/hostnames/mount.go index 32e23240c..6a4680975 100644 --- a/drivers/shared/hostnames/mount.go +++ b/drivers/shared/hostnames/mount.go @@ -4,6 +4,7 @@ import ( "fmt" "io/ioutil" "net" + "os" "path/filepath" "strings" @@ -56,9 +57,14 @@ ff02::3 ip6-allhosts } path := filepath.Join(taskDir, "hosts") - err := ioutil.WriteFile(path, []byte(content.String()), 0644) - if err != nil { - return nil, err + + // tasks within an alloc should be able to share and modify the file, so + // only write to it if it doesn't exist + if _, err := os.Stat(path); os.IsNotExist(err) { + err := ioutil.WriteFile(path, []byte(content.String()), 0644) + if err != nil { + return nil, err + } } // Note that we're not setting readonly. The file is in the task dir diff --git a/website/content/docs/upgrade/upgrade-specific.mdx b/website/content/docs/upgrade/upgrade-specific.mdx index 2a8afa211..09dedcf85 100644 --- a/website/content/docs/upgrade/upgrade-specific.mdx +++ b/website/content/docs/upgrade/upgrade-specific.mdx @@ -13,6 +13,16 @@ upgrade. However, specific versions of Nomad may have more details provided for their upgrades as a result of new features or changed behavior. This page is used to document those details separately from the standard upgrade flow. +## Nomad 1.1.3 + +#### Docker Driver + +Starting in Nomad 1.1.2, task groups with `network.mode = "bridge"` generated +a hosts file in Docker containers. This generated hosts file was bind-mounted +from the task directory to `/etc/hosts` within the task. In Nomad 1.1.3 the +source for the bind mount was moved to the allocation directory so that it is +shared between all tasks in an allocation. + ## Nomad 1.1.0 #### Enterprise licenses