func()

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
}