容器和 syscall.CLONE_NEWNS

Containers and syscall.CLONE_NEWNS

我运行在此回购协议 https://github.com/lizrice/containers-from-scratch/blob/master/main.go 上使用 golang 代码,但我遇到了挂载命名空间问题。代码应该做的是在它自己的挂载命名空间中创建一个进程。因此,如果我 运行 使用 sudo go run main.go run /bin/bash 的代码并在目录 mytemp 中创建一个文件,我应该能够从新启动的进程中看到该文件,但是如果我尝试查看该文件移动到主机上的 rootfs 目录,由于挂载命名空间,我应该看不到该文件。 不幸的是我仍然看到这个文件,所以我 运行 的进程似乎没有挂载命名空间。 对于 运行 代码,我将此 https://github.com/ericchiang/containers-from-scratch/releases/download/v0.1.0/rootfs.tar.gz 用作 rootfs 并将其移动到 /home/me 下。然后我创建了一个 mytemp 目录用作 tmpfs 挂载目标。 您对进程未挂载命名空间的原因有任何想法吗?

谢谢!

这个问题可以通过将主机挂载配置为私有来解决,不接收任何传播事件或将任何传播事件转发到其他挂载,参见RedHat - Sharing Mounts

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

$ mount --make-rprivate /