Windows 怎么使用 PowerShell 监控 Windows 容器的实时网络流量

雨婷吖_4630

雨婷吖_4630

2026-09-07

574人浏览

原创

powershell 无法直接监控 windows 容器实时网络流量,因其原生 cmdlet 仅作用于宿主机网络层,不穿透容器命名空间;需结合 hns 网络查询、docker api 调用(/containers/{id}/stats)、docker stats 命令轮询及端口连接分析等组合方式实现有效监控。

powershell 本身不直接支持监控 windows 容器(如 docker for windows 或 windows server container)的实时网络流量,因为 windows 容器默认使用 hns(host network service)或 docker0 虚拟网桥,其网络栈由 hns(hyper-v network service)或 cnm(container network model)抽象管理,原生 powershell cmdlet(如 get-netadapterget-counterget-nettcpconnection)仅作用于宿主机网络层,无法穿透到容器命名空间内的接口或进程

但你可以通过以下组合路径实现有效监控,核心思路是:利用宿主机视角关联容器网络行为 + 借助容器运行时工具暴露指标 + PowerShell 封装采集与解析


? 确认容器网络模式与宿主机映射关系

Windows 容器常用 nattransparent 模式:

  • nat 模式下,容器共享宿主机 IP,出站连接经 NAT 映射,端口映射(-p)会体现在宿主机监听端口;
  • transparent 模式下,容器获得独立 IP(通常在 Hyper-V 虚拟交换机子网中),其流量可被宿主机网卡捕获。

先查清当前容器网络配置:

# 查看所有 HNS 网络(含 nat/transparent)
Get-HnsNetwork | Select-Object Name, Type, Subnets

# 查看正在运行的容器及其端口映射(Docker CLI)
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"

✅ 关键点:只有 transparent 模式下的容器流量能被 Get-Counter "\Network Interface\..." 直接观测;nat 模式需通过端口映射反向追踪。


? 方法一:监控宿主机上容器绑定端口的 TCP 连接活跃度

适用于 Web 服务、API 等显式暴露端口的容器(如 -p 8080:80):

# 列出所有 ESTABLISHED 连接,并筛选目标端口(如宿主机监听的 8080)
Get-NetTCPConnection -State Established |
  Where-Object { $_.LocalPort -eq 8080 } |
  Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, OwningProcess |
  ForEach-Object {
    $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
    [PSCustomObject]@{
      Port     = $_.LocalPort
      RemoteIP = $_.RemoteAddress
      PID      = $_.OwningProcess
      Process  = $proc.ProcessName
      CPU      = if($proc) { "{0:N1}" -f $proc.CPU } else { '-' }
    }
  } | Sort-Object CPU -Descending

? 提示:若容器未做端口映射(如仅内部通信),此法无效,需转向方法二或三。

星流
星流

星流是一款面向中文创作者的 AI 绘画、图片生成和视觉设计平台。

下载

? 方法二:调用 Docker API 获取容器实时网络统计(推荐)

Docker Desktop for Windows 或 Docker Engine on Windows Server 提供 /containers/{id}/stats HTTP 接口,返回 JSON 格式的实时 RX/TX 字节数:

# 假设 Docker daemon 在本地监听 http://127.0.0.1:2375(需启用 insecure registry 或配置 TLS)
$containerId = (docker ps -q | Select-Object -First 1)
if ($containerId) {
  $url = "http://127.0.0.1:2375/containers/$containerId/stats?stream=false"
  try {
    $stats = Invoke-RestMethod -Uri $url -Method Get -TimeoutSec 5
    $rx = $stats.networks.eth0.rx_bytes   # 或根据实际网卡名(如 'nat' 模式下可能是 'vEthernet (DockerNAT)')
    $tx = $stats.networks.eth0.tx_bytes
    Write-Host "Container $containerId → RX: $(('{0:N0}' -f $rx)) B, TX: $(('{0:N0}' -f $tx)) B" -ForegroundColor Green
  } catch { Write-Warning "Failed to fetch stats: $($_.Exception.Message)" }
}

⚠️ 注意:需确保 Docker daemon 已启用 TCP API(默认关闭),且 PowerShell 具备网络访问权限。生产环境建议启用 TLS 认证。


? 方法三:用 PowerShell 轮询 docker stats 命令输出(轻量级替代)

无需开启 API,适合快速验证:

while ($true) {
  Clear-Host
  docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}" 2>$null
  Start-Sleep -Seconds 2
}

该命令输出包含 NetIO 列(如 1.2MB / 340KB),即容器累计收发流量——虽非秒级实时速率,但可观察趋势变化。


? 补充:识别“偷跑”容器流量的典型线索

  • svchost.exe + PID 对应多个容器进程?→ 检查是否为 com.docker.backend.exedockerd.exe 托管的 HNS 端点;
  • Get-NetTCPConnection 中大量连接指向 172.x.x.x192.168.x.x 内网地址 → 极可能为容器间通信(transparent 网络);
  • resmon 中“网络活动的进程”出现 dockerd.execom.docker.backend.exe 占比异常高 → 容器镜像拉取、日志推送或健康检查频繁触发。

不复杂但容易忽略:Windows 容器网络监控必须跳出“宿主机进程=容器进程”的思维定式——容器是隔离的用户态进程集合,其网络行为需通过运行时(Docker/HCS)暴露指标,而非直接用 Get-ProcessGet-Counter 抓取。

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

397

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

820

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2352

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

796

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

689

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

354

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2096

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

3852

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

627

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HBuilderX Windows 安装手册
HBuilderX Windows 安装手册

共0课时 | 0人学习

phpEnv手册
phpEnv手册

共0课时 | 0人学习

好课诞生记
好课诞生记

共20课时 | 7.1万人学习