From 1ad79f8a19519e79f0319a5c59357a29cced0612 Mon Sep 17 00:00:00 2001 From: Mathias Lafeldt Date: Wed, 3 Aug 2016 16:18:15 +0200 Subject: [PATCH 1/2] Docker driver: allow to configure working directory --- client/driver/docker.go | 8 ++++++++ website/source/docs/drivers/docker.html.md | 2 ++ 2 files changed, 10 insertions(+) diff --git a/client/driver/docker.go b/client/driver/docker.go index 3b63989173f0..8e71ceedddba 100644 --- a/client/driver/docker.go +++ b/client/driver/docker.go @@ -96,6 +96,7 @@ type DockerDriverConfig struct { TTY bool `mapstructure:"tty"` // Allocate a Pseudo-TTY Interactive bool `mapstructure:"interactive"` // Keep STDIN open even if not attached ShmSize int64 `mapstructure:"shm_size"` // Size of /dev/shm of the container in bytes + WorkDir string `mapstructure:"work_dir"` // Working directory inside the container } // Validate validates a docker driver config @@ -223,6 +224,9 @@ func (d *DockerDriver) Validate(config map[string]interface{}) error { "shm_size": &fields.FieldSchema{ Type: fields.TypeInt, }, + "work_dir": &fields.FieldSchema{ + Type: fields.TypeString, + }, }, } @@ -386,6 +390,10 @@ func (d *DockerDriver) createContainer(ctx *ExecContext, task *structs.Task, OpenStdin: driverConfig.Interactive, } + if driverConfig.WorkDir != "" { + config.WorkingDir = driverConfig.WorkDir + } + memLimit := int64(task.Resources.MemoryMB) * 1024 * 1024 hostConfig := &docker.HostConfig{ // Convert MB to bytes. This is an absolute value. diff --git a/website/source/docs/drivers/docker.html.md b/website/source/docs/drivers/docker.html.md index d17c9af3d1b4..fc5f0660be5d 100644 --- a/website/source/docs/drivers/docker.html.md +++ b/website/source/docs/drivers/docker.html.md @@ -107,6 +107,8 @@ The following options are available for use in the job specification. * `shm_size` - (Optional) The size (bytes) of /dev/shm for the container. +* `work_dir` - (Optional) The working directory inside the container. + ### Container Name Nomad creates a container after pulling an image. Containers are named From 27d787e76cf73ecc5a32bebef54b7ddce6a14125 Mon Sep 17 00:00:00 2001 From: Mathias Lafeldt Date: Wed, 3 Aug 2016 16:35:49 +0200 Subject: [PATCH 2/2] Test configuration of Docker working directory --- client/driver/docker_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/client/driver/docker_test.go b/client/driver/docker_test.go index 3229c0fd3855..6dcae2a71784 100644 --- a/client/driver/docker_test.go +++ b/client/driver/docker_test.go @@ -605,6 +605,24 @@ func TestDockerDNS(t *testing.T) { } } +func TestDockerWorkDir(t *testing.T) { + t.Parallel() + task, _, _ := dockerTask() + task.Config["work_dir"] = "/some/path" + + client, handle, cleanup := dockerSetup(t, task) + defer cleanup() + + container, err := client.InspectContainer(handle.(*DockerHandle).ContainerID()) + if err != nil { + t.Fatalf("err: %v", err) + } + + if want, got := "/some/path", container.Config.WorkingDir; want != got { + t.Errorf("Wrong working directory for docker job. Expect: %d, got: %d", want, got) + } +} + func inSlice(needle string, haystack []string) bool { for _, h := range haystack { if h == needle {