
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
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
说明:本镜像基于Nicola Kabar (nicolaka/netshot)的优秀作品分叉,原项目已停止维护。
Docker和Kubernetes网络故障排除可能非常复杂。通过理解Docker和Kubernetes网络工作原理并使用合适的工具,可有效排查和解决网络问题。netshoot容器集成了一系列强大的网络诊断工具,用于排查Docker网络问题,并提供实际场景中的使用案例。
网络命名空间提供网络资源的隔离,Docker通过网络、PID、挂载等命名空间为每个容器创建隔离环境(网络接口、路由、IP等完全隔离)。Kubernetes为每个Pod创建网络命名空间,Pod内所有容器共享该命名空间(与Docker容器的主要区别)。
可通过切换命名空间,使用netshoot诊断目标网络栈:
容器网络命名空间
若应用容器存在网络问题,可使用目标容器的网络命名空间启动netshoot:
bash$ docker run -it --net container:<container_name> gabidavar/netshoot
主机网络命名空间
若怀疑主机网络存在问题,可使用主机网络命名空间启动netshoot:
bash$ docker run -it --net host gabidavar/netshoot
网络命名空间
若需排查Docker网络,可使用nsenter进入网络命名空间(详见下文nsenter部分)。
创建临时调试容器
bash$ kubectl run --generator=run-pod/v1 tmp-shell --image-pull-policy=Always --rm -it --image gabidavar/netshoot
使用主机网络命名空间
bash$ kubectl run tmp-shell --generator=run-pod/v1 --image-pull-policy=Always --rm -it --overrides='{"spec": {"hostNetwork": true, "enableServiceLinks": false}}' --image gabidavar/netshoot
特权模式+主机网络
bash$ kubectl run tmp-shell --generator=run-pod/v1 --image gabidavar/netshoot --rm -ti \ --overrides='{"spec": {"hostNetwork": true, "enableServiceLinks": false, "containers": [{"name": "tmp-shell", "image": "gabidavar/netshoot", "imagePullPolicy": "Always", "tty": true, "stdin": true, "securityContext": {"privileged": true} }]}}'
网络问题可能导致应用性能下降,常见问题包括:
netshoot包含的工具参考下图推荐的Linux可观测性工具:
:
apache2-utils, bash, bcc-tools, bind-tools, bird, bpftrace-tools, bridge-utils, busybox-extras, conntrack-tools, coreutils, curl, dhcping, drill, ethtool, file, fping, iftop, iperf, iproute2, ipset, iptables, ip6tables, iptraf-ng, iputils, ipvsadm, ipython, jq, liboping, mtr, net-snmp-tools, netcat-openbsd, nftables, ngrep, nmap, nmap-nping, openssl, pstree, py3-virtualenv, python3, scapy, socat, strace, su-exec, sudo, tcpdump, tcptraceroute, tini, tree, util-linux, vim, ***-tools
使用calicoctl管理Calico CNI
Docker企业版及许多Kubernetes方案使用Calico作为默认CNI插件,负责Pod网络资源(IP分配、路由、网络策略等)。calicoctl是管理Calico的CLI工具,需与etcd通信,推荐在集群内master节点运行。
netshoot到kube-system命名空间(使用此部署文件):bash# 假设已加载UCP客户端配置,kubectl可用 kubectl apply -f netshoot-calico.yaml
bashkubectl get pod --selector=app=netshoot -n kube-system NAME READY STATUS RESTARTS AGE netshoot-calico-deploy-57b8896459-rzqz4 1/1 Running 0 1h
calicoctl:bashkubectl exec -it -n kube-system netshoot-calico-deploy-57b8896459-rzqz4 -- /bin/bash -l # 查看工作负载端点 calicoctl get wep # 查看IP池 calicoctl get ippool # 查看BGP配置 calicoctl get bgpconfig -o yaml
iperf:测试容器/主机间网络性能
bash$ docker network create -d overlay perf-test
bash# 服务端:监听9999端口 $ docker service create --name perf-test-a --network perf-test gabidavar/netshoot iperf -s -p 9999 # 客户端:连接服务端 $ docker service create --name perf-test-b --network perf-test gabidavar/netshoot iperf -c perf-test-a -p 9999
bash$ docker service ls $ docker ps $ docker logs <perf-test-a容器ID>
tcpdump:抓包分析
在iperf示例中,使用服务端容器的网络命名空间启动netshoot并抓包:
bash$ docker run -it --net container:<perf-test-a容器ID> gabidavar/netshoot # 抓取eth0接口9999端口的1个包,显示十六进制 / # tcpdump -i eth0 port 9999 -c 1 -Xvv
netstat:查看网络连接
在iperf示例中,确认服务端监听9999端口:
bash$ docker run -it --net container:<perf-test-a容器ID> gabidavar/netshoot / # netstat -tulpn
nmap:端口扫描
扫描目标主机的端口范围(如UCP/Swarm所需端口):
bash$ docker run -it --privileged gabidavar/netshoot nmap -p 12376-12390 -dd <目标IP>
端口状态说明:
open:端口开放且有应用监听closed:端口可达但无应用监听filtered:端口被防火墙/路由规则阻止iftop:实时带宽监控
在iperf示例中,监控服务端容器的eth0接口带宽:
bash$ docker run -it --net container:<perf-test-a容器ID> gabidavar/netshoot iftop -i eth0
!https://github.com/mindw/netshoot/raw/master/img/iftop.png
drill:DNS解析测试
在iperf示例中,解析Docker服务DNS:
bash$ docker run -it --net container:<perf-test-a容器ID> gabidavar/netshoot drill -V 5 perf-test-b
netcat:TCP/UDP连接测试
bash$ docker network create -d overlay my-ovl
bash# 服务端:监听8080端口 $ docker service create --name service-a --network my-ovl -p 8080:8080 gabidavar/netshoot nc -l 8080 # 客户端:测试连接 $ docker service create --name service-b --network my-ovl gabidavar/netshoot nc -vz service-a 8080
bash$ docker logs <service-b容器ID>
netgen:生成网络流量
netgen是使用netcat定期生成流量的脚本,用于演示网络功能。
Docker run方式:
bash$ docker network create -d bridge br # 启动服务端 $ docker run -d --rm --net br --name c1 gabidavar/netshoot netgen c2 5000 # 启动客户端 $ docker run -it --rm --net br --name c2 gabidavar/netshoot netgen c1 5000
Docker service方式:
bash$ docker network create -d overlay ov $ docker service create --network ov --replicas 3 --name srvc netshoot netgen srvc 5000 $ docker service logs srvc
iproute2:网络配置管理
查看主机路由表和ARP表:
bash$ docker run -it --net host gabidavar/netshoot / # ip route show # 路由表 / # ip neigh show # ARP表
nsenter:进入命名空间
nsenter需特权模式运行,并挂载/var/run/docker/netns以访问网络命名空间:
bash$ docker run -it --privileged -v /var/run/docker/netns:/var/run/docker/netns gabidavar/netshoot / # nsenter --net=/var/run/docker/netns/<网络命名空间ID>
CTOP:容器指标监控
绑定docker.sock以监控容器CPU、内存、网络、I/O等指标:
bash$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock gabidavar/netshoot ctop
!https://github.com/mindw/netshoot/raw/master/img/ctop.png 按"q"退出。
欢迎提供反馈,通过PR贡献网络诊断工具和使用案例。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。





来自真实用户的反馈,见证轩辕镜像的优质服务