[解决方案] 使用十几行脚本在容器网络命名空间内并且执行宿主空间的命令

使用十几行脚本在容器网络命名空间内并且执行宿主空间的命令

通常容器内是没有 netstat tcpdump 命名的,甚至 ip 都没有。

在需要排查容器内网络问题的时候,只能临时下载这些命令,操作起来很浪费时间。

一般而言,宿主机内部携带的命令会多一些,那么可以利用宿主机的命令来观测容器内的网络状态的。

  • 使用 docker inspect 找到容器的命名空间路径
  • 使用 ip 命令来切换命名空间并且执行命令

ip netns 只能识别到 /var/run/netns 中的命名空间

shell 复制代码
#!/bin/bash
container_name=${@:1:1}
command=${@:2}

if [ -z "$container_name" ]; then
    echo "Usage: $0 <container_name> <command>"
    exit 1
fi

if [ -z "$command" ]; then
    echo "Usage: $0 <container_name> <command>"
    exit 1
fi

exec_inside_container() {
    set -e
    sandbox_key=$(docker inspect $container_name --format '{{ .NetworkSettings.SandboxKey }}')
    netns_name=$1-$(basename $sandbox_key)
    set +e

    rm -f /var/run/netns/$netns_name
    ln -s $sandbox_key /var/run/netns/$netns_name

    ip netns exec $netns_name $command
    rm -f /var/run/netns/$netns_name
}

exec_inside_container $container_name $command

如:在宿主机内查看容器内的网卡信息

shell 复制代码
$ ./nsexec.sh ubuntu ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
1116: eth0@if1117: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
相关推荐
Albert XUU10 分钟前
nettrace rtt分析器
linux·运维·网络·网络协议·网络安全·腾讯云·运维开发
做我想做34 分钟前
虚拟机 CentOS 9 网络配置
linux·网络·centos
小小的木头人40 分钟前
CentOS 8 更换软件源
linux·运维·centos
BetterJason1 小时前
ubuntu20不同版本的cudnn切换
linux
奔跑中的小象1 小时前
低版本 Linux 系统通过二进制方式升级部署高版本 Docker
linux·docker
极客代码1 小时前
Linux IPC:System V共享内存汇总整理
linux·c语言·开发语言·并发·共享内存·通信·system v
小wanga2 小时前
【Linux】网络层、数据链路层、DNS、ICMP协议、NAT技术
linux·运维·网络
火车叼位2 小时前
命令`ls **/*.exe`遗漏本目录下文件?Bash的globstar配置了解一下
linux·shell
嵌入式-老费3 小时前
Linux上位机开发实战(x86和arm自由切换)
linux·运维·arm开发
猪猪侠|ZZXia3 小时前
# linux有哪些显示服务器协议、显示服务器、显示管理器、窗口管理器?有哪些用于开发图形用户界面的工具包?有哪些桌面环境?
linux·服务器