Я хотел запустить пространство имен 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
, но не сработало. Есть ли другой способ преодолеть это?