我刚刚了解了 chroot 监狱是什么,所以如果这个问题没有多大意义,请原谅。
基本上我有两个进程在我的机器上本地运行,并且希望“uname -n”的结果对于每个进程(及其所有子进程)都不同。我如何使用 chroot 监狱来为我做到这一点?
答案1
你不能用 chroot 来做到这一点。但你可以通过改变来做到这一点悉尼科技大学命名空间,例如使用取消共享。
mysystem# unshare --uts sh -c 'hostname test; uname -n'; uname -n
test
mysystem
同样,交互式:
第一个航站楼:
mysystem# unshare --uts bash
mysystem# hostname test
mysystem# exec bash # to refresh prompt
test# uname -n
test
test# strace uname -n 2>&1|tail
brk(NULL) = 0x5592a93f6000
brk(0x5592a9417000) = 0x5592a9417000
uname({sysname="Linux", nodename="test", ...}) = 0
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
write(1, "test\n", 5test
) = 5
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
test#
第二个航站楼,不受影响:
mysystem# uname -n
mysystem
mysystem#
只需退出第一个终端上的 shell,返回到从未更改名称空间的调用终端:
test# exit
mysystem#
注意仅有的主机名发生变化。还有类似的命名空间用于各种功能(网络、安装点...)。这是容器的基石:所有容器都将被使用(容器的另一个主要基石是cgroups)。