You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell脚本判断Windows系统中指定进程ID对应的进程是否为Docker容器进程?

嘿,作为新手找不到直接的检查方法太正常啦!我来给你拆解一下怎么用PowerShell搞定这两个需求——不管是批量识别Docker容器进程,还是针对单个PID做检查,都有可行的办法~

一、识别Windows上所有运行的Docker容器进程

Windows上的Docker容器进程会自带ContainerId属性,我们可以通过Windows的CIM接口获取进程的这个属性,再和Docker本身的容器信息做关联,就能准确识别出哪些进程属于Docker容器。

具体步骤和代码如下:

  1. 先获取所有带有容器ID的系统进程:
$containerProcesses = Get-CimInstance Win32_Process | Where-Object { $_.ContainerId -ne $null }
  1. 再获取当前运行的Docker容器列表(包含完整的容器ID和名称):
$dockerContainers = docker ps -q --no-trunc | ForEach-Object { docker inspect $_ | ConvertFrom-Json }
  1. 最后把进程和容器关联起来,输出清晰的结构化信息:
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容器"
}

使用方法:

  1. 把上面的代码保存为Check-DockerContainerProcess.ps1
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 22:17:33