这是一个Docker网络故障排查的“瑞士军刀”容器,集成了多种网络诊断工具,可高效支持Docker环境下网络连接、配置、性能及通信异常等问题的排查与分析,轻量便携且功能全面,为开发与运维人员快速定位和解决Docker网络故障提供一站式工具支持。
收藏数: 319
下载次数: 132318788
类型:

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 持续迭代,欢迎通过项目仓库提交问题或贡献代码。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 版本下载页面。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务