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