宿主机的命令在容器中使用
现在很多软用已经打包好镜像,但是很常见的命令都可能没有。出问题了,有时候排查起来很困难。这里介绍一种使用宿主机的命令在容器中使用。容器运行相当于宿主机的进程。在主机找到容器的pid,然后进入该命名空间。就可以使用宿主机的命名空间。
创建测试容器
$ kubectl run nginx01 --image=nginx
$ kubectl run nginx01 --image=nginx
$ kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx01 1/1 Running 0 61s 20.0.40.195 k8s-node03 <none> <none>
nginx02 1/1 Running 0 51s 20.0.30.2 k8s-node02 <none> <none>
测试两个容器的连通性
$ kubectl exec nginx01 -- ping 20.0.30.2
OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"ping\": executable file not found in $PATH": unknown
command terminated with exit code 126
容器使用宿主机命令
找到对应的容器id
$ docker ps | grep nginx01
2449c734f760 nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes k8s_nginx01_nginx01_default_02cdc367-77ce-4107-b4f0-abb72059d30a_0
90c7eeec7393 ecloudedu/pause-amd64:3.0 "/pause" 4 minutes ago Up 4 minutes k8s_POD_nginx01_default_02cdc367-77ce-4107-b4f0-abb72059d30a_0
找容器的pid
$ docker inspect -f {{.State.Pid}} 2449c734f760
37336
进入容器的命名空间
nsenter -t 37336 -n
验证是否进入容器IP
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1480
inet 20.0.40.195 netmask 255.255.255.255 broadcast 20.0.40.195
ether a2:6b:8b:ec:cb:71 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
验证ping命令
$ ping -c4 20.0.30.2
PING 20.0.30.2 (20.0.30.2) 56(84) bytes of data.
64 bytes from 20.0.30.2: icmp_seq=1 ttl=62 time=2.43 ms
64 bytes from 20.0.30.2: icmp_seq=2 ttl=62 time=0.406 ms
64 bytes from 20.0.30.2: icmp_seq=3 ttl=62 time=0.479 ms
64 bytes from 20.0.30.2: icmp_seq=4 ttl=62 time=0.384 ms
--- 20.0.30.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.384/0.925/2.434/0.872 ms
简写版
# 确定哪个节点运行容器。
kubectl get pod -owide
# 以下步骤在对应的节点执行。
NAME=nginx01
nsenter -t `docker ps | grep $NAME | grep -v "/pause" | awk '{print $1}' | xargs docker inspect -f {{.State.Pid}}` -n
ifconfig eth0
exit
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)