我有以下代码mnt.go
package main
import (
"fmt"
"log"
"os"
"os/exec"
"syscall"
)
func main() {
fmt.Println("Entering go program")
cmd := exec.Command("/bin/bash")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
cmd.SysProcAttr = &syscall.SysProcAttr{
Cloneflags: syscall.CLONE_NEWNS,
}
if err := cmd.Run(); err != nil {
log.Fatal(err)
}
fmt.Println("Exiting go program")
}
我想运行上面的代码来生成一个 bash shell,然后运行以下命令:
./mnt
mkdir /tmp/testmount
mount -n -o size=1m -t tmpfs tmpfs /tmp/testmount
cd /tmp/testmount
touch 1.txt 2.txt 3.txt
现在,当我启动另一个 shell 并运行命令时
ls /tmp/testmount
我应该看不到文件1.txt
,2.txt
并且3.txt
. 由于临时文件系统已挂载在挂载命名空间内,因此不应从外部看到它。
但这对我来说不是这样。为什么syscall.CLONE_NEWNS
没有按预期工作?我应该怎么做?
其中一条评论提到这段代码对他们来说很好。FWIW,我正在运行一个安装了 golang 并且没有其他自定义的“bento/centos-7”Vagrant 盒子。