
Docker 和 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
进入 Docker 网络的命名空间
需配合 nsenter 工具(详见下文 nsenter 使用示例),需挂载 Docker 网络命名空间目录并以特权模式运行:
bashdocker run -it --privileged -v /var/run/docker/netns:/var/run/docker/netns nicolaka/netshoot
临时调试容器(Pod 网络)
创建一个临时交互式容器,共享目标 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 12376-12390 -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 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务