如何判断 Powershell 脚本中的 Docker Desktop 是否为 运行?

How can I tell if Docker Desktop is running in a Powershell script?

我有一个 Powershell 脚本,我需要在其中知道 Docker 桌面当前是否 运行。

我读到过,一种方法是使用 docker ps 并查看是否返回了容器列表或错误消息。但我正在努力在实际脚本中使用它。我还没有弄清楚如何正确地捕获结果并根据结果采取行动。

这是我目前的情况:

function IsDockerDesktopRunning()
{
    $dockerPsResult = docker ps | Out-String

    Write-Host "Result is:"
    Write-Host $dockerPsResult

    if (($dockerPsResult).StartsWith("error"))
    {
        return $false
    }
    return $true
}

$isRunning = IsDockerDesktopRunning
Write-Host $isRunning

不是运行时,结果是这样的:

error during connect: This error may indicate that the docker daemon is not running.: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/containers/json": open //./pipe/docker_engine: The system cannot find the file specified.
Result is:

True

如您所见,docker ps 命令的输出看起来是在执行时得到输出,并且未填充变量。

有没有办法正确捕获输出? 或者,我应该换一种方式解决这个问题吗?

要同时捕获错误输出,像这样将 stderr 重定向到 stdout。

$docker = docker ps 2>&1

您可以使用它来确定 docker 桌面是否为 运行。

if((docker ps 2>&1) -match '^(?!error)'){
   Write-Host "Docker is running"
}

由于似乎无法在变量中捕获错误消息,因此我决定切换逻辑并依赖于变量为空。

function IsDockerDesktopRunning()
{
    $dockerPsResult = docker ps
    if ($dockerPsResult)
    {
        return $true
    }
    return $false
}

$isRunning = IsDockerDesktopRunning
Write-Host $isRunning

不幸的副作用是错误消息仍然打印到屏幕上,使事情看起来有点混乱。但逻辑是可行的,所以我会接受它。

编辑:由于添加了这个不太好的答案,道格更新了 他的 答案,现在是正确的。谢谢道格。