nsenter命令简单介绍(转载)
nsenter命令是一个可以在指定进程的命令空间下运行指定程序的命令。它位于util-linux包中。
用途
一个最典型的用途就是进入容器的网络命令空间。相当多的容器为了轻量级,是不包含较为基础的命令的,比如说ip address,ping,telnet,ss,tcpdump等等命令,这就给调试容器网络带来相当大的困扰:只能通过docker inspect ContainerID命令获取到容器IP,以及无法测试和其他网络的连通性。这时就可以使用nsenter命令仅进入该容器的网络命名空间,使用宿主机的命令调试容器网络。
[root@localhost ~]# kubectl --kubeconfig /tmp/kubectl.conf get pods -o wide |grep 172.21.125.144 nginx-7f957b9dc-8qd5w 1/1 Running 0 11d 10.22.174.8 172.21.125.144 <none> <none> [root@localhost ~]# docker ps |grep nginx c786965e9ef3 nginx "/docker-entrypoint.…" 11 days ago Up 11 days k8s_nginx-server_nginx-7f9xxx2e602fa_0 5a567301b615 registry.xxx.com/public/pause:3.1 "/pause" 11 days ago Up 11 days k8s_POD_nginx-7f9xxx2e602fa_0 [root@localhost ~]# docker inspect -f {{.State.Pid}} c786965e9ef3 4631 [root@localhost ~]# nsenter -n -t 4631 [root@localhost ~]# ip a
namespace是Linux中一些进程的属性的作用域,使用命名空间,可以隔离不同的进程。
Linux在不断的添加命名空间,目前有:
mount:挂载命名空间,使进程有一个独立的挂载文件系统,始于Linux 2.4.19
ipc:ipc命名空间,使进程有一个独立的ipc,包括消息队列,共享内存和信号量,始于Linux 2.6.19
uts:uts命名空间,使进程有一个独立的hostname和domainname,始于Linux 2.6.19
net:network命令空间,使进程有一个独立的网络栈,始于Linux 2.6.24
pid:pid命名空间,使进程有一个独立的pid空间,始于Linux 2.6.24
user:user命名空间,是进程有一个独立的user空间,始于Linux 2.6.23,结束于Linux 3.8
cgroup:cgroup命名空间,使进程有一个独立的cgroup控制组,始于Linux 4.6
Linux的每个进程都具有命名空间,可以在**/proc/PID/ns**目录中看到命名空间的文件描述符。
————————————————
版权声明:本文为CSDN博主「大数据老司机」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35745940/article/details/119900634