我的目标是在远程容器内运行 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
但没有用。有没有其他方法可以克服这个问题?