Невозможно запустить изолированный процесс внутри пространства имен в удаленном контейнере - PullRequest
0 голосов
/ 10 апреля 2020

Я хотел запустить пространство имен Linux (в Go) внутри удаленного контейнера, чтобы я мог запускать изолированный процесс, не влияя на хост.

    cmd := exec.Command("/bin/bash")

    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    cmd.SysProcAttr = &syscall.SysProcAttr{
        Cloneflags: syscall.CLONE_NEWUTS,
    }

    err := cmd.Run()
    if err != nil {
        fmt.Printf(err.Error())
        os.Exit(1)
    }

Давайте представим, что я хотел запустить bash внутри этого изолированного пространства. Поэтому я запускаю для него новое пространство имен UTS. Поэтому, когда я запустил код, я получил эту ошибку.

fork/exec /bin/bash: operation not permitted

Я провел некоторое исследование этой ошибки и обнаружил причину ошибки из-за непривилегированной проблемы пространства имен. Поэтому, когда я закомментирую эти строки

cmd.SysProcAttr = &syscall.SysProcAttr{
    Cloneflags: syscall.CLONE_NEWUTS,
}

код работает. Но это не служит цели. Также я попробовал --privilaged, но не сработало. Есть ли другой способ преодолеть это?

...