首页/云/Docker 容器速查/复用其他容器网络栈排查
网络与存储52 条

复用其他容器网络栈排查

通过 --network container:目标 让工具容器共享目标容器的网络命名空间,用它的视角检查端口、连通性与抓包。

Docker 容器速查云更新于 2026-10-13

共享网络栈排障

docker run --network container:目标 让新容器复用目标容器的网络命名空间:两者看到的是同一套网卡、路由、DNS 与端口表,新容器里执行 ss、curl、tcpdump 得到的就是目标容器的真实网络视图。这类做法不改动目标容器、不需要在业务镜像里装排查工具,常用于生产环境里「只看不碰」的现场诊断。

基本信息

语法--network container:目标容器名或 ID
前置条件目标容器存在,可以是运行中或已停止
常用工具镜像nicolaka/netshoot、busybox、curlimages/curl
限制该容器不能再发布端口,端口由目标容器承担

典型使用场景

  • 业务镜像里没有排查工具:临时起一个带工具链的容器,共享网络栈做诊断
  • 核对监听情况:确认应用实际监听的是 0.0.0.0 还是 127.0.0.1
  • 验证本机响应:从容器自身视角请求 localhost,排除外部链路干扰
  • 抓包定位:只抓目标容器的流量,不引入额外网卡与混杂模式
  • 对比解析配置:读取目标容器真正生效的路由表与 DNS 配置

诊断示例

诊断示例
# 查看目标容器的监听与端口映射结果
docker run --rm -it --network container:web nicolaka/netshoot ss -ltnp

# 从目标容器视角访问自身服务
docker run --rm --network container:web curlimages/curl:8.8.0 -sS -o /dev/null -w '%{http_code}' http://127.0.0.1:80/

# 抓取该容器的流量,指定时间与文件
docker run --rm -it --network container:web nicolaka/netshoot tcpdump -i any -c 20 port 80

# 核对路由与 DNS 配置
docker run --rm --network container:web nicolaka/netshoot ip route

检查项对照

排查目标在共享容器里执行能看出什么
端口监听ss -ltnp与目标容器完全一致的监听地址与端口
本机响应curl -s http://localhost:端口应用自身的返回,不含外部链路
流量内容tcpdump -i any port 端口只包含该容器的收发报文
网络配置ip route、cat /etc/resolv.conf目标容器真正生效的路由与 DNS
该容器不能再用 -p 发布端口,端口映射必须由目标容器完成;排查结束直接删掉工具容器即可,不留下任何改动。
顶层进程退出后容器随即结束,交互式排查加 -it 保持现场,否则抓到一半就中断。

易错点

  • 给共享网络栈的容器加端口映射:参数会被拒绝或语义不符合预期,端口发布始终由目标容器负责
  • 在目标容器内直接安装工具:会改变生产容器文件系统并可能影响下次发布,能共享就共享
  • 抓包不加过滤:大流量下抓满整段数据反而拖慢定位,先按端口与数量限制范围
  • 忘了清理临时容器:长期堆积的排查容器会占用名字与磁盘,用完即删

数据来源与参考

  • Docker 官方 CLI 参考:docker run --network container:(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌