容器和 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 /
我运行在此回购协议 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 /