aspire dashboard 必须由 aspire apphost 启动,服务需显式注册、暴露健康检查端点并启用遥测导出;打不开 http://localhost:18080 是因后台服务未启动,常见原因包括端口被占、docker desktop 未运行、容器镜像未拉取完成或服务未在 apphost 中通过 addproject() 注册。

Aspire Dashboard 不是“装完就能用”的监控面板,它必须和 Aspire AppHost 绑定运行,且服务需显式注册、暴露健康检查端点、启用遥测导出——缺一不可。
Dashboard 打不开 http://localhost:18080 怎么办
不是浏览器问题,而是后台服务根本没起来。常见卡点:
-
dotnet aspire dashboard单独运行无效:Dashboard 必须由aspire run或dotnet run启动的 AppHost 进程拉起,不能脱离宿主独立启动 - 端口被占:用
netstat -ano | findstr :18080查进程,或改用aspire run --dashboard-port 18081 - Docker Desktop 未运行:Dashboard 依赖本地容器(如
aspire-dashboard-db),docker ps应能看到至少 2 个 aspire 相关容器 - 首次启动卡在镜像拉取:确保 Docker 有外网访问权限,镜像来自
mcr.microsoft.com/dotnet/aspire/dashboard
服务列表为空,我的 API 就是不显示
Dashboard 不扫描解决方案,只认 AddProject<t>()</t> 或 AddExecutable() 显式声明的服务。
- 确认你的服务注册在
AppHost.cs(不是 Web API 项目的Program.cs):builder.AddProject<projects.myapi>("myapi")</projects.myapi> - 服务名(如
"myapi")必须唯一,且会直接显示在左侧资源列表中 - 服务启动后仍显示 “Not Ready”:默认探测
http://localhost:50xx/health,若你用的是/api/health,得补上:.WithHealthCheck("/api/health") - 手动
dotnet run启动的服务不会被识别——必须由 AppHost 进程启动并注入配置
日志/Trace/Metrics 全是空的或 404
不是 Dashboard 故障,而是你的服务没发数据过去。
- 日志空白:服务需引用
Microsoft.Extensions.Logging并使用ILogger记录(Console.WriteLine不会被捕获) - Trace 空白:服务必须启用 OpenTelemetry,且导出目标为
http://localhost:18080/otlp(Dashboard 内置 OTLP 接收器) -
metrics页面 404:服务需启用 Prometheus endpoint,例如在Program.cs加:builder.Services.AddOpenTelemetry().WithMetrics(c => c.AddPrometheusExporter()),并确保/metrics路由可公开访问 - Dashboard 默认只接收本机 localhost 发来的遥测;跨容器或远程服务需显式配置
OTEL_EXPORTER_OTLP_ENDPOINT指向 host.docker.internal:18080
命令行启动后跳转到 login 页面,token 怎么填
Dashboard 强制 token 登录,但 token 是一次性且自动失效的,别手输。
- 启动时终端会输出类似这样的 URL:
https://localhost:17213/login?t=2b4a2ebc362b7fef9b5ccf73e702647b - Windows Terminal / iTerm / VS Code 终端支持 Ctrl+Click 直接打开,自动登录
- 如果终端不支持,复制整条 URL 粘贴进浏览器地址栏——只复制 token 值(
t=xxx部分)是无效的 - Visual Studio 或 VS Code(装了 C# Dev Kit)按 F5 启动时,登录完全静默,无需干预
最容易被忽略的一点:Dashboard 的拓扑图、依赖连线、Trace 调用链,全部依赖服务间真实的 HTTP/gRPC 调用流量。没调用,图就是空的——它不靠静态分析,只看实际发生的请求。










