in builder/context.go [29:114]
func (b *Builder) getDockerRunArgs(
volMounts map[string]string,
volName string,
workDir string,
disableWorkDirOverride bool,
remove bool,
detach bool,
envs []string,
ports []string,
expose []string,
privilaged bool,
user string,
network string,
isolation string,
cpus string,
entrypoint string,
containerName string,
cmd string) []string {
var args []string
var sb strings.Builder
// Run user commands from a shell instance in order to mirror the shell's field splitting algorithms,
// so we don't have to write our own argv parser for exec.Command.
if runtime.GOOS == util.WindowsOS {
args = []string{"powershell.exe", "-Command"}
} else {
args = []string{"/bin/sh", "-c"}
}
sb.WriteString("docker run")
if remove {
sb.WriteString(" --rm")
}
if detach {
sb.WriteString(" --detach")
}
for _, port := range ports {
sb.WriteString(" -p " + port)
}
for _, exp := range expose {
sb.WriteString(" --expose " + exp)
}
if privilaged {
sb.WriteString(" --privileged")
}
if user != "" {
sb.WriteString(" --user " + user)
}
if network != "" {
sb.WriteString(" --network " + network)
}
if isolation != "" {
sb.WriteString(" --isolation " + isolation)
}
if cpus != "" {
sb.WriteString(" --cpus " + cpus)
}
if entrypoint != "" {
sb.WriteString(" --entrypoint " + entrypoint)
}
sb.WriteString(" --name " + containerName)
sb.WriteString(" --volume " + volName + ":" + containerWorkspaceDir)
sb.WriteString(" --volume " + util.DockerSocketVolumeMapping)
sb.WriteString(" --volume " + homeVol + ":" + homeWorkDir)
if len(volMounts) > 0 {
for key, val := range volMounts {
sb.WriteString(" --volume " + key + ":" + val)
}
}
sb.WriteString(" --env " + homeEnv)
// User environment variables come after any defaults.
// This allows overriding the HOME environment variable for a step.
// NB: this has the assumption that the underlying runtime handles the case of duplicated
// environment variables by only keeping the last specified.
for _, env := range envs {
sb.WriteString(" --env " + env)
}
if !disableWorkDirOverride {
sb.WriteString(" --workdir " + normalizeWorkDir(workDir))
}
sb.WriteString(" " + cmd)
args = append(args, sb.String())
return args
}