0

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

4

0 回答 0