
dP dP dP 88 88 88 88d888b. .d8888b. d8888P .d8888b. 88d888b. .d8888b. .d8888b. d8888P 88' `88 88ooood8 88 Y8ooooo. 88' `88 88' `88 88' `88 88 88 88 88. ... 88 88 88 88 88. .88 88. .88 88 dP dP `88888P' dP `88888P' dP dP `88888P' `88888P' dP
用途:Docker和Kubernetes网络故障排除可能变得复杂。通过正确理解Docker和Kubernetes网络工作原理并使用合适的工具集,您可以排查和解决这些网络问题。netshoot容器提供了一套强大的网络故障排除工具,可用于诊断Docker网络问题,并附带一系列实际场景中的使用案例说明。
使用此工具前,需了解一个关键概念:网络命名空间(Network Namespaces)。网络命名空间提供网络相关系统资源的隔离。Docker使用网络命名空间及其他类型的命名空间(pid、mount、user等)为每个容器创建隔离环境,其中接口、路由和IP等网络资源在容器的网络命名空间内完全隔离。
Kubernetes同样使用网络命名空间,Kubelet为每个Pod创建一个网络命名空间,Pod内所有容器共享该命名空间(包括网卡、IP、TCP套接字等),这是Docker容器与Kubernetes Pod的关键区别。
命名空间的优势在于可切换,您可以进入其他容器的网络命名空间,使用未安装在目标容器中的工具对其网络栈进行故障排除。此外,netshoot可通过主机网络命名空间排查主机本身的网络问题,无需在主机或应用容器中直接安装工具。
容器网络命名空间:若应用容器存在网络问题,可使用目标容器的网络命名空间启动netshoot:
bash$ docker run -it --net container:<container_name> nicolaka/netshoot
主机网络命名空间:若怀疑问题出在主机,可使用主机网络命名空间启动netshoot:
bash$ docker run -it --net host nicolaka/netshoot
网络的网络命名空间:若需排查Docker网络,可使用nsenter进入网络命名空间,详见下文“nsenter”部分。
创建临时调试容器:
bash$ kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot -- /bin/bash
使用主机网络命名空间创建容器:
bash$ kubectl run tmp-shell --rm -i --tty --overrides='{"spec": {"hostNetwork": true}}' --image nicolaka/netshoot -- /bin/bash
许多网络问题会导致应用性能下降,部分与底层网络基础设施(underlay)相关, others与主机或Docker层配置错误有关。常见网络问题包括:
为排查这些问题,netshoot集成了一套强大工具,推荐参考以下工具图:
 ------------------------------------------------------------ [ 4] local 10.0.3.3 port 9999 connected with 10.0.3.5 port 35102 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.0 sec 32.7 GBytes 28.1 Gbits/sec [ 5] local 10.0.3.3 port 9999 connected with 10.0.3.5 port 35112
用途:强大的命令行packet分析工具,可显示TCP/IP等协议的传输或接收packet。
延续iperf示例,使用perf-test-a容器的网络命名空间启动netshoot并抓包:
bash🐳 → docker run -it --net container:perf-test-a.1.0qlf1kaka0cq38gojf7wcatoa nicolaka/netshoot # 在eth0接口上捕获TCP端口9999的packet,捕获1个后停止并显示十六进制数据 / # tcpdump -i eth0 port 9999 -c 1 -Xvv tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 23:14:09.771825 IP (tos 0x0, ttl 64, id 60898, offset 0, flags [DF], proto TCP (6), length 64360) 10.0.3.5.60032 > 0e2ccbf3d608.9999: Flags [.], cksum 0x1563 (incorrect -> 0x895d), seq 222376702:222441010, ack 3545090958, win 221, options [nop,nop,TS val 2488870 ecr 2488869], length 64308 0x0000: 4500 fb68 ede2 4000 4006 37a5 0a00 0305 E..h..@.@.7..... 0x0010: 0a00 0303 ea80 270f 0d41 32fe d34d cb8e ......'..A2..M.. 0x0020: 8010 00dd 1563 0000 0101 080a 0025 fa26 .....c.......%.& 0x0030: 0025 fa25 0000 0000 0000 0001 0000 270f .%.%..........'. 0x0040: 0000 0000 0000 0000 ffff d8f0 3435 3637 ............4567 0x0050: 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123 0x0060: 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789 0x0070: 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345 0x0080: 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901 0x0090: 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567 0x00a0: 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123 0x00b0: 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789 0x00c0: 3031 3233 3435 3637 3839 3031 3233 3435 0123456789012345 0x00d0: 3637 3839 3031 3233 3435 3637 3839 3031 6789012345678901 0x00e0: 3233 3435 3637 3839 3031 3233 3435 3637 2345678901234567 0x00f0: 3839 3031 3233 3435 3637 3839 3031 3233 8901234567890123 0x0100: 3435 3637 3839 3031 3233 3435 3637 3839 4567890123456789
更多关于tcpdump的信息可参考tcpdump手册。
用途:检查网络配置和活动的实用工具。
延续iperf示例,使用netstat确认容器监听9999端口:
bash🐳 → docker run -it --net container:perf-test-a.1.0qlf1kaka0cq38gojf7wcatoa nicolaka/netshoot / # netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.11:46727 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN - udp 0 0 127.0.0.11:39552 0.0.0.0:* -
nmap(“Network Mapper”)是开源网络探测和安全审计工具,可扫描主机间开放端口,常用于检查Swarm或UCP集群通信所需端口是否开放。
bash🐳 → docker run -it --privileged nicolaka/netshoot nmap -p 12376-12390 -dd 172.31.24.25 ... Discovered closed port 12388/tcp on 172.31.24.25 Discovered closed port 12379/tcp on 172.31.24.25 Discovered closed port 12389/tcp on 172.31.24.25 Discovered closed port 12376/tcp on 172.31.24.25 ...
端口状态说明:
open:端口通路开放,且有应用监听closed:端口通路开放,但无应用监听filtered:端口通路关闭,被防火墙、路由规则或主机规则阻止用途:类似top监控CPU,iftop监听指定接口的网络流量,按主机对显示当前带宽使用情况。
延续iperf示例:
bash→ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ce4ff40a5456 nicolaka/netshoot:latest "iperf -s -p 9999" 5 minutes ago Up 5 minutes perf-test-a.1.bil2mo8inj3r9nyrss1g15qav 🐳 → docker run -it --net container:perf-test-a.1.bil2mo8inj3r9nyrss1g15qav nicolaka/netshoot iftop -i eth0
!iftop.png
用途:获取DNS相关信息的工具。
延续iperf示例,使用drill查看Docker中服务DNS解析:
bash🐳 → docker run -it --net container:perf-test-a.1.bil2mo8inj3r9nyrss1g15qav nicolaka/netshoot drill -V 5 perf-test-b ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 0 ;; flags: rd ; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;; perf-test-b. IN A ;; ANSWER SECTION: ;; AUTHORITY SECTION:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务