2023年7月23日发(作者:)
nsenter命令简介nsenter命令简介nsenter命令是⼀个可以在指定进程的命令空间下运⾏指定程序的命令。它位于util-linux包中。
⽤途⼀个最典型的⽤途就是进⼊容器的⽹络命令空间。相当多的容器为了轻量级,是不包含较为基础的命令的,⽐如说
ip address,ping,telnet,ss,tcpdump 等等命令,这就给调试容器⽹络带来相当⼤的困扰:只能通过
docker inspect ContainerID 命令获取到容器IP,以及⽆法测试和其他⽹络的连通性。这时就可以使⽤nsenter命令仅进⼊该容器的⽹络命名空间,使⽤宿主机的命令调试容器⽹络。此外,nsenter也可以进⼊
mnt, uts, ipc, pid, user 命令空间,以及指定根⽬录和⼯作⽬录。
原理namespacenamespace是Linux中⼀些进程的属性的作⽤域,使⽤命名空间,可以隔离不同的进程。Linux在不断的添加命名空间,⽬前有:mount:挂载命名空间,使进程有⼀个独⽴的挂载⽂件系统,始于Linux 2.4.19ipc:ipc命名空间,使进程有⼀个独⽴的ipc,包括消息队列,共享内存和信号量,始于Linux 2.6.19uts:uts命名空间,使进程有⼀个独⽴的hostname和domainname,始于Linux 2.6.19net:network命令空间,使进程有⼀个独⽴的⽹络栈,始于Linux 2.6.24pid:pid命名空间,使进程有⼀个独⽴的pid空间,始于Linux 2.6.24user:user命名空间,是进程有⼀个独⽴的user空间,始于Linux 2.6.23,结束于Linux 3.8cgroup:cgroup命名空间,使进程有⼀个独⽴的cgroup控制组,始于Linux 4.6Linux的每个进程都具有命名空间,可以在/proc/PID/ns⽬录中看到命名空间的⽂件描述符。
使⽤nsenter [options] [program [arguments]]options:-t, --target pid:指定被进⼊命名空间的⽬标进程的pid-m, --mount[=file]:进⼊mount命令空间。如果指定了file,则进⼊file的命令空间-u, --uts[=file]:进⼊uts命令空间。如果指定了file,则进⼊file的命令空间-i, --ipc[=file]:进⼊ipc命令空间。如果指定了file,则进⼊file的命令空间-n, --net[=file]:进⼊net命令空间。如果指定了file,则进⼊file的命令空间-p, --pid[=file]:进⼊pid命令空间。如果指定了file,则进⼊file的命令空间-U, --user[=file]:进⼊user命令空间。如果指定了file,则进⼊file的命令空间-G, --setgid gid:设置运⾏程序的gid-S, --setuid uid:设置运⾏程序的uid-r, --root[=directory]:设置根⽬录-w, --wd[=directory]:设置⼯作⽬录如果没有给出program,则默认执⾏$SHELL。
⽰例:这⾥我随便运⾏了⼀个容器并查看容器pid[root@Wshile ~]# docker inspect -f {{.}} 091f114de06e5645然后,使⽤nsenter命令进⼊该容器的⽹络命令空间:[root@Wshile ~]# nsenter -n -t5645[root@Wshile ~]# ip addr1: lo:
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever进⼊成功。在Kubernetes中,在得到容器pid之前还需获取容器的ID,可以使⽤如下命令获取:[root@Wshile test]# kubectl get pod test -oyaml|grep containerID - containerID: docker://cf0873782d587dbca6aa32f49605229da3748600a9926e85b36916141597ec85
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690103264a306133.html
评论列表(0条)