diff --git a/integration/dockerfiles/Dockerfile_test_user_run b/integration/dockerfiles/Dockerfile_test_user_run index d7f0ae3b86..bdad4f4b9b 100644 --- a/integration/dockerfiles/Dockerfile_test_user_run +++ b/integration/dockerfiles/Dockerfile_test_user_run @@ -20,8 +20,12 @@ RUN echo "hey" > /tmp/foo USER testuser:1001 RUN echo "hey2" >> /tmp/foo +USER root + RUN useradd -ms /bin/bash newuser USER newuser RUN echo "hi" > $HOME/file COPY context/foo $HOME/foo +USER 1001 +RUN echo $HOME diff --git a/pkg/commands/run.go b/pkg/commands/run.go index 3b59f84c9d..7cfe7b4864 100644 --- a/pkg/commands/run.go +++ b/pkg/commands/run.go @@ -20,6 +20,7 @@ import ( "fmt" "os" "os/exec" + "os/user" "strconv" "strings" "syscall" @@ -116,19 +117,29 @@ func (r *RunCommand) ExecuteCommand(config *v1.Config, buildArgs *dockerfile.Bui } // addDefaultHOME adds the default value for HOME if it isn't already set -func addDefaultHOME(user string, envs []string) []string { +func addDefaultHOME(u string, envs []string) []string { for _, env := range envs { split := strings.SplitN(env, "=", 2) if split[0] == constants.HOME { return envs } } + // If user isn't set, set default value of HOME - if user == "" { + if u == "" { return append(envs, fmt.Sprintf("%s=%s", constants.HOME, constants.DefaultHOMEValue)) } - // If user is set, set value of HOME to /home/${user} - return append(envs, fmt.Sprintf("%s=/home/%s", constants.HOME, user)) + + // If user is set to username, set value of HOME to /home/${user} + // Otherwise the user is set to uid and HOME is / + home := fmt.Sprintf("%s=/", constants.HOME) + userObj, err := user.Lookup(u) + if err == nil { + u = userObj.Username + home = fmt.Sprintf("%s=/home/%s", constants.HOME, u) + } + + return append(envs, home) } // FilesToSnapshot returns nil for this command because we don't know which files diff --git a/pkg/commands/run_test.go b/pkg/commands/run_test.go index 5a3971c68c..fd3afb591f 100644 --- a/pkg/commands/run_test.go +++ b/pkg/commands/run_test.go @@ -59,7 +59,7 @@ func Test_addDefaultHOME(t *testing.T) { }, expected: []string{ "PATH=/something/else", - "HOME=/home/newuser", + "HOME=/", }, }, }