Go 容器和syscall.CLONE\u NEWNS

Go 容器和syscall.CLONE\u NEWNS,go,containers,mount,linux-namespaces,Go,Containers,Mount,Linux Namespaces,我正在这个repo上运行golang代码,我的mount名称空间有问题。代码应该做的是在自己的装载命名空间中创建一个进程。因此,如果我使用sudo go run main.go run/bin/bash运行代码,并在目录mytemp中创建一个文件,我应该能够从新启动的进程中查看该文件,但如果我试图查看该文件移动到主机上的rootfs目录,则由于装载命名空间,我应该无法查看该文件。 不幸的是,我仍然看到这个文件,所以我运行的进程似乎没有装入名称空间。 为了运行代码,我将其用作rootfs,并将其移

我正在这个repo上运行golang代码,我的mount名称空间有问题。代码应该做的是在自己的装载命名空间中创建一个进程。因此,如果我使用
sudo go run main.go run/bin/bash
运行代码,并在目录
mytemp
中创建一个文件,我应该能够从新启动的进程中查看该文件,但如果我试图查看该文件移动到主机上的rootfs目录,则由于装载命名空间,我应该无法查看该文件。 不幸的是,我仍然看到这个文件,所以我运行的进程似乎没有装入名称空间。 为了运行代码,我将其用作rootfs,并将其移动到
/home/me
下。然后我创建了一个
mytemp
目录,用作tmpfs装载目标。 您是否知道进程没有获得装载名称空间的原因


谢谢

此问题可以通过将主机装载配置为私有装载来解决,该装载不会接收任何传播事件或将任何传播事件转发给其他装载,请参阅

在创建容器之前,应在主机上执行此命令:

$ mount --make-rprivate /

它使用
MS|u PRIVATE | MS_REC
标志调用系统调用。这也可以做到。这是正确的@ephemient,这里有一个例子:
syscall.Mount(“,”/“,”,syscall.MS_PRIVATE | syscall.MS_REC,”)