$ErrorActionPreference = 'Stop' $projectRoot = Split-Path -Parent $PSScriptRoot Set-Location -LiteralPath $projectRoot docker compose config --quiet docker compose up --build -d Write-Host '等待 API 就绪...' for ($attempt = 1; $attempt -le 60; $attempt++) { try { $response = Invoke-RestMethod -Uri 'http://localhost:58080/health/ready' -TimeoutSec 2 if ($response.data.status -eq 'ready') { Write-Host '本地环境已就绪:' Write-Host ' Web http://localhost:3100' Write-Host ' API http://localhost:58080' Write-Host ' Callbacks http://localhost:58081' Write-Host ' Worker http://localhost:58082' Write-Host ' MinIO http://localhost:59001' Write-Host ' Keycloak http://localhost:58180' exit 0 } } catch { Start-Sleep -Seconds 2 } } docker compose ps throw 'API在约定时间内未就绪,请执行 docker compose logs api postgres redis migrate 查看原因。'