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 ***-*** -dd 172.31.24.25 ... Discovered closed port ***/tcp on 172.31.24.25 Discovered closed port ***/tcp on 172.31.24.25 Discovered closed port ***/tcp on 172.31.24.25 Discovered closed port ***/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 Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429