nsenter 使用方法

nsenter

Posted by Randle on July 17, 2020

nsenter是一个命令行工具,用来进入到进程的linux namespace中。

docker 提供了 exec 命令可以进入到容器中,nsenter 具有跟 docker exec 差不多的执行效果,但是更底层,特别是 docker daemon 进程异常的时候,nsenter 的作用就显示出来了,因此可以用于排查线上的 docker 问题。

CentOS 用户可以直接使用 yum install util-linux 来进行安装。

启动要进入的容器:

1
docker run -d ubuntu /bin/bash -c "sleep 1000"

要进入容器执行如下命令:

1
2
3
4
5
# 获取容器的pid
docker inspect 9f7f7a7f0f26 -f ''
# 进入pid对应的namespace
sudo nsenter --target $PID --mount --uts --ipc --net --pid $cmd

对于qemu-kvm启动的虚拟机,每个虚拟机的 mount namespace 也是隔离的,可以通过相同的方法进入执行相应命令调试。

1
2
3
nsenter -t $pid --mount df -t nfs -a
nsenter -t $pid --mount mount -o nolock $IP:/dir /mnt
nsenter -t $pid --mount df -h