有时候Docker容器中缺少需要的软件。比如 curl,wget,ifconfig,ip,tcpdump 等基础软件包,什么都干不了,很是让人抓狂。
面对这种容器镜像,定位问题就会很困难,因为你进入容器后,想执行命令还得重新安装各种基础软件,非常麻烦。
这个时候,我们要拿起“nsenter”这个根魔法棒,在主机上上面挥舞起来。
ns-enter,顾名思义,就是「进入各种namespace」,即nsenter命令可以进入到指定目标进程的ns视角。
所以nsenter可以站在指定进程的“视角”看世界,本文重点关注进入目标进程的“网络ns”视角,即站在「容器中的进程视角」看待容器里面的网络世界,并在那个视角中执行命令。
(1) 找到目标进程PID
docker inspect xxx
[root@tsjsdbd ubuntu]# docker inspect 8402d89fe04a
[
{
"Id": "8402d89fe04a7e161faf8a01a86c47f8402d4c8d7207b6897d8e6d661d670df4",
"State": {
"Status": "running",
"Pid": 18751,
"ExitCode": 0,
"Error": "",
"StartedAt": "2023-05-10T03:12:19.221460059Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
(2)直接执行特定的cli命令
nsenter -n -t 822647 ifconfig
(3)进入容器视角,进行交互式cli
nsenter -n -t 822647
exit