From 054b85a7b25e46935c0d91f544aac69dc3497468 Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Sat, 15 Mar 2014 14:00:35 -0600 Subject: [PATCH] Add proper support for relative WORKDIR instructions Docker-DCO-1.1-Signed-off-by: Andrew Page (github: tianon) --- integration/buildfile_test.go | 17 +++++++++++++++++ server/buildfile.go | 9 ++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/integration/buildfile_test.go b/integration/buildfile_test.go index 7f6e69ece3..9c986d74c2 100644 --- a/integration/buildfile_test.go +++ b/integration/buildfile_test.go @@ -441,6 +441,23 @@ func TestBuildUser(t *testing.T) { } } +func TestBuildRelativeWorkdir(t *testing.T) { + img, err := buildImage(testContextTemplate{` + FROM {IMAGE} + RUN [ "$PWD" = '/' ] + WORKDIR /test1 + RUN [ "$PWD" = '/test1' ] + WORKDIR test2 + RUN [ "$PWD" = '/test1/test2' ] + `, nil, nil}, t, nil, true) + if err != nil { + t.Fatal(err) + } + if img.Config.WorkingDir != "/test1/test2" { + t.Fail() + } +} + func TestBuildEnv(t *testing.T) { img, err := buildImage(testContextTemplate{` from {IMAGE} diff --git a/server/buildfile.go b/server/buildfile.go index af6702cc1d..5d5fda4d8e 100644 --- a/server/buildfile.go +++ b/server/buildfile.go @@ -338,7 +338,14 @@ func (b *buildFile) CmdCopy(args string) error { } func (b *buildFile) CmdWorkdir(workdir string) error { - b.config.WorkingDir = workdir + if workdir[0] == '/' { + b.config.WorkingDir = workdir + } else { + if b.config.WorkingDir == "" { + b.config.WorkingDir = "/" + } + b.config.WorkingDir = filepath.Join(b.config.WorkingDir, workdir) + } return b.commit("", b.config.Cmd, fmt.Sprintf("WORKDIR %v", workdir)) }