如何使用PowerShell脚本判断Windows系统中指定进程ID对应的进程是否为Docker容器进程?
嘿,作为新手找不到直接的检查方法太正常啦!我来给你拆解一下怎么用PowerShell搞定这两个需求——不管是批量识别Docker容器进程,还是针对单个PID做检查,都有可行的办法~
一、识别Windows上所有运行的Docker容器进程
Windows上的Docker容器进程会自带ContainerId属性,我们可以通过Windows的CIM接口获取进程的这个属性,再和Docker本身的容器信息做关联,就能准确识别出哪些进程属于Docker容器。
具体步骤和代码如下:
- 先获取所有带有容器ID的系统进程:
$containerProcesses = Get-CimInstance Win32_Process | Where-Object { $_.ContainerId -ne $null }
- 再获取当前运行的Docker容器列表(包含完整的容器ID和名称):
$dockerContainers = docker ps -q --no-trunc | ForEach-Object { docker inspect $_ | ConvertFrom-Json }
- 最后把进程和容器关联起来,输出清晰的结构化信息:
foreach ($proc in $containerProcesses) { $matchingContainer = $dockerContainers | Where-Object { $_.Id -eq $proc.ContainerId } if ($matchingContainer) { [PSCustomObject]@{ 进程ID = $proc.ProcessId 进程名称 = $proc.Name 容器名称 = $matchingContainer.Name.TrimStart('/') 容器完整ID = $proc.ContainerId } } }
运行这段代码后,你就能看到所有属于Docker容器的进程详情啦~
二、根据给定PID检查是否为Docker容器进程
如果你已经知道某个进程的ID,想要快速验证它是不是Docker容器里的进程,可以用下面这个脚本:
param( [Parameter(Mandatory=$true, HelpMessage="要检查的进程ID")] [int]$ProcessId ) # 尝试获取目标进程 $targetProcess = Get-CimInstance Win32_Process -Filter "ProcessId = $ProcessId" -ErrorAction SilentlyContinue if (-not $targetProcess) { Write-Host "⚠️ 错误:未找到进程ID为 $ProcessId 的进程" exit 1 } # 先检查进程是否有容器ID if (-not $targetProcess.ContainerId) { Write-Host "✅ 进程ID $ProcessId 不是Docker容器进程" exit 0 } # 验证该容器ID是否属于Docker容器 $dockerContainerInfo = docker inspect $targetProcess.ContainerId 2>&1 | ConvertFrom-Json -ErrorAction SilentlyContinue if ($dockerContainerInfo) { Write-Host "✅ 进程ID $ProcessId 属于Docker容器:" Write-Host " 容器名称:$($dockerContainerInfo.Name.TrimStart('/'))" Write-Host " 容器短ID:$($dockerContainerInfo.Id.Substring(0, 12))" # 显示短ID更友好 } else { Write-Host "⚠️ 进程ID $ProcessId 带有容器ID,但不属于Docker容器" }
使用方法:
- 把上面的代码保存为
Check-DockerContainerProcess.ps1 - 在PowerShell里运行:
.\Check-DockerContainerProcess.ps1 -ProcessId 1234(把1234换成你要检查的实际PID)
注意事项:
- 确保Docker Desktop已经在运行,否则
docker命令会失效 - 运行PowerShell的用户需要有足够的权限:既要能访问系统进程信息,也要能执行Docker命令
- 如果你的
docker命令不在系统PATH里,需要写完整的路径(比如C:\Program Files\Docker\Docker\resources\bin\docker.exe)
内容的提问来源于stack exchange,提问作者Rama Sharma
相关产品推荐
相关产品推荐

