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