nicolaka/netshootDocker 和 Kubernetes 网络问题排查往往复杂,需要深入理解其网络原理并搭配合适工具。netshoot 容器集成了一系列强大的网络排障工具,可直接用于定位 Docker 和 Kubernetes 环境中的网络问题,无需在主机或业务容器中安装额外依赖。
使用 netshoot 前需先理解 网络命名空间(Network Namespaces):它是 Linux 提供的网络资源隔离机制,Docker 和 Kubernetes 均基于此实现网络隔离。
通过切换网络命名空间,netshoot 可直接进入目标容器、主机或网络的命名空间进行排查,无需修改目标环境。
若业务容器网络异常,可让 netshoot 共享其网络命名空间:
bashdocker run -it --net container:<容器名称/ID> nicolaka/netshoot
若怀疑问题出在主机网络,可让 netshoot 使用主机网络:
bashdocker run -it --net host nicolaka/netshoot
需配合 nsenter 工具(详见下文 nsenter 使用示例),需挂载 Docker 网络命名空间目录并以特权模式运行:
bashdocker run -it --privileged -v /var/run/docker/netns:/var/run/docker/netns nicolaka/netshoot
创建一个临时交互式容器,共享目标 Pod 的网络(默认行为):
bashkubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot -- /bin/bash
若需排查主机网络问题,创建使用主机网络的临时容器:
bashkubectl run tmp-shell --rm -i --tty --overrides='{"spec": {"hostNetwork": true}}' --image nicolaka/netshoot -- /bin/bash
网络问题常导致性能下降,如延迟、路由错误、DNS 解析失败、防火墙拦截、ARP 表不完整等。netshoot 集成了 Linux 可观测性工具图谱 推荐的核心工具,覆盖各类排查场景。
包含以下关键工具(部分工具使用示例见下文):
apache2-utils, bash, bind-tools, bird, bridge-utils, busybox-extras, calicoctl, conntrack-tools, ctop, curl, dhcping, drill, ethtool, fping, httpie, iftop, iperf, iproute2, iptables, mtr, netcat-openbsd, nmap, openssl, scapy, socat, tcpdump, tcptraceroute, termshark, tshark, vim
用途:测量容器/主机间的带宽和延迟。
bashdocker network create -d overlay perf-test
bashdocker service create --name perf-test-a --network perf-test nicolaka/netshoot iperf -s -p 9999
bashdocker service create --name perf-test-b --network perf-test nicolaka/netshoot iperf -c perf-test-a -p 9999
bashdocker logs <perf-test-a 容器ID>
用途:捕获网络数据包,分析协议细节。
在 iperf 测试场景中,进入服务端容器的网络命名空间,捕获 9999 端口流量:
bash# 进入 perf-test-a 容器的网络命名空间 docker run -it --net container:perf-test-a.1.<容器ID> nicolaka/netshoot # 捕获 eth0 网卡上 9999 端口的 TCP 包(-c 1 表示只抓1个包) tcpdump -i eth0 port 9999 -c 1 -Xvv
用途:检查端口监听、连接状态等。
确认 iperf 服务端是否监听 9999 端口:
bash# 进入服务端网络命名空间 docker run -it --net container:perf-test-a.1.<容器ID> nicolaka/netshoot # 查看监听端口(-tulpn:TCP/UDP/监听/程序名) netstat -tulpn
输出中若显示 0.0.0.0:9999,说明端口正常监听。
用途:检测目标端口开放状态(开放/关闭/被过滤)。
扫描目标主机 172.31.24.25 的 - 端口范围:
bashdocker run -it --privileged nicolaka/netshoot nmap -p ***-*** -dd 172.31.24.25
用途:类似 top,实时显示主机间带宽占用。
在 iperf 测试中,监控服务端容器的 eth0 网卡流量:
bashdocker run -it --net container:perf-test-a.1.<容器ID> nicolaka/netshoot iftop -i eth0
用途:诊断 DNS 解析问题,查看域名解析过程。
在 Docker 覆盖网络中,解析服务名 perf-test-b:
bashdocker run -it --net container:perf-test-a.1.<容器ID> nicolaka/netshoot drill perf-test-b
输出中 ANSWER SECTION 会显示解析到的服务 VIP。
用途:检测端口连通性,排查防火墙拦截。
bashdocker network create -d overlay my-ovl docker service create --name service-a --network my-ovl nicolaka/netshoot nc -l 8080
bashdocker service create --name service-b --network my-ovl nicolaka/netshoot nc -vz service-a 8080
succeeded,说明端口连通。用途:进入 Docker 网络(如覆盖网络)自身的命名空间,查看底层网络配置(如网桥、VxLAN 接口)。
bashdocker network create -d overlay nsenter-test docker service create --name test-svc --replicas 3 --network nsenter-test busybox ping localhost
nsenter-test,命名空间名为 1-<网络ID前缀>):
bashdocker run -it --privileged -v /var/run/docker/netns:/var/run/docker/netns nicolaka/netshoot nsenter --net=/var/run/docker/netns/1-nsenter-test sh
bashbrctl show # 显示网桥及关联接口 bridge fdb show br br0 # 查看 L2 转发表
用途:实时监控容器 CPU、内存、网络 I/O 等指标。
挂载 Docker 套接字,启动 ctop:
bashdocker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock nicolaka/netshoot ctop
用途:终端中捕获和分析数据包,支持 Wireshark 过滤规则。
捕获主机 eth0 网卡的 ICMP 流量:
bashdocker run --rm --cap-add=NET_ADMIN --cap-add=NET_RAW -it nicolaka/netshoot termshark -i eth0 icmp
netshoot 持续迭代,欢迎通过项目仓库提交问题或贡献代码。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务