介绍
nsenter
是用来进入容器内部的一个命令,它的优势之处在于可以自己选择加载容器的那些namespaces。
说直白一点就是 排查docker容器和排查linux一样的方法。
1、nsenter的安装
官方源码,下载地址
yum install util-linux -y
2、nsenter的使用
[root@localhost ~]# nsenter --help 用法: nsenter [options] <program> [<argument>...] Run a program with namespaces of other processes. 选项: -t, --target <pid> 要获取名字空间的目标进程 -m, --mount[=<file>] enter mount namespace -u, --uts[=<file>] enter UTS namespace (hostname etc) -i, --ipc[=<file>] enter System V IPC namespace -n, --net[=<file>] enter network namespace -p, --pid[=<file>] enter pid namespace -U, --user[=<file>] enter user namespace -S, --setuid <uid> set uid in entered namespace -G, --setgid <gid> set gid in entered namespace --preserve-credentials do not touch uids or gids -r, --root[=<dir>] set the root directory -w, --wd[=<dir>] set the working directory -F, --no-fork 执行 <程序> 前不 fork -Z, --follow-context set SELinux context according to --target PID -h, --help 显示此帮助并退出 -V, --version 输出版本信息并退出
中文说明
--mount参数是进去到mount namespace中 --uts参数是进入到uts namespace中 --ipc参数是进入到System V IPC namaspace中 --net参数是进入到network namespace中 --pid参数是进入到pid namespace中 --user参数是进入到user namespace中
nsenter
命令要获取到docker容器的进程,然后再使用nsenter
工具进去到docker容器中
# docker inspect -f {{.State.Pid}} 容器名或者容器id #查询容器的PID # nsenter -t 容器PID(容器名) -m -u -i -n -p #输入该命令进入容器
示例
# 起一个Nginx镜像 [root@localhost ~]# docker run -p 80:80 -d --name nginx nginx # 查看pid [root@localhost ~]# docker inspect -f {{.State.Pid}} nginx 4552
# 进入容器,使用宿主机的namespace进行排错,就可以排错linux宿主机一样进行容器排错了。
nsenter -t 4552 -u -i -n -p
end...