如何判断 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
不幸的副作用是错误消息仍然打印到屏幕上,使事情看起来有点混乱。但逻辑是可行的,所以我会接受它。
编辑:由于添加了这个不太好的答案,道格更新了 他的 答案,现在是正确的。谢谢道格。
我有一个 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
不幸的副作用是错误消息仍然打印到屏幕上,使事情看起来有点混乱。但逻辑是可行的,所以我会接受它。
编辑:由于添加了这个不太好的答案,道格更新了 他的 答案,现在是正确的。谢谢道格。