美文网首页收藏
nsenter命令详解

nsenter命令详解

作者: Joening | 来源:发表于2022-04-27 11:09 被阅读0次

nsenter 是一个可以用来进入到目标程序所在 Namespace 中运行命令的工具,一般常用于在宿主机上调试容器中运行的程序。

nsenter 安装

nsenter 位于 util-linux 包中,一般常用的 Linux 发行版都已经默认安装。如果你的系统没有安装,可以使用以下命令进行安装:

$ yum install util-linux

nsenter 用途

一个比较典型的用途就是进入容器的网络命名空间。通常容器为了轻量级,大多都是不包含较为基础网络管理调试工具,比如:ip、ping、telnet、ss、tcpdump 等命令,给调试容器内网络带来相当大的困扰。

nsenter 命令可以很方便的进入指定容器的网络命名空间,使用宿主机的命令调试容器网络。

除此以外,nsenter 还可以进入 mnt、uts、ipc、pid、user 等命名空间,以及指定根目录和工作目录。

nsenter命令的语法:

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]:设置工作目录

示例:

运行一个nginx容器,查看该容器的pid:

docker inspect -f {{.State.Pid}} nginx
54325
# 进入net命令空间
nsenter -n -t54325
ip addr
# 进入容器nsenter -m -u -i -n -p -t
nsenter --target 54325 --mount --uts --ipc --net --pid
root@164f44ff58d1:/bin#
在Kubernetes中,在得到容器pid之前还需获取容器的ID,可以使用如下命令获取:

kubectl get pod test -oyaml|grep containerID
  - containerID: docker://cf0873782d587dbca6aa32f49605229da3748600a9926e85b36916141597ec85
或者更为精确地获取containerID:

kubectl get pod test -o template --template='{{range .status.containerStatuses}}{{.containerID}}{{end}}'
docker://cf0873782d587dbca6aa32f49605229da3748600a9926e85b36916141597ec85

原理

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

相关文章

  • nsenter命令详解

    nsenter 是一个可以用来进入到目标程序所在 Namespace 中运行命令的工具,一般常用于在宿主机上调试容...

  • nsenter命令

    作用: 进入其他linux命名空间执行操作。如从主机进入容器的命名空间,或者从容器进入主机的命名空间。一般情况下,...

  • nsenter命令

    用途 容器一般为精简镜像,缺乏相关指令和工具,nsenter可以指定加载哪些namespace,如果不指定具体文件...

  • nsenter命令简介

    nsenter命令的语法: 示例: 运行一个nginx容器,查看该容器的pid: 在Kubernetes中,在得到...

  • nsenter

    使用场景:当需要在容器中调试网络,而容器没有安装调试命令,可以通过docker inspect --format ...

  • Docker-Compose环境搭建和部署SpringBoot项

    前言 fighting Docker使用nsenter工具进入容器 1.下载nsenter工具 2.解压util-...

  • top vmstat iostat glance

    TOP/Vmstat/iostat/Glance 命令详解 TOP命令详解 top命令和ps命令的基本作用是相同的...

  • Linux

    linux awk命令详解、linux awk命令Linux常用操作指令Linux netstat命令详解 awk...

  • 如何在docker中进行gdb调试

    环境准备 install nsenter nsenter 工具在 util-linux 包2.23版本后包含。 n...

  • Linux rpm命令详解

    Linux rpm命令详解 概述 : CentOS系统上rpm命令管理程序包命令详解 : 安装 卸载 升级 查询 ...

网友评论

    本文标题:nsenter命令详解

    本文链接:https://www.haomeiwen.com/subject/iparyrtx.html