Docker Compose 部署
更新: 2026-10-16 15:20:09 字数: 0 字 时长: 0 分钟
Docker Compose 是 Aspire 支持的自托管部署目标。添加 Docker Compose 环境后,Aspire 会根据应用模型生成 Compose 文件、环境变量配置与容器镜像,产物可以部署到任何运行 Docker 或 Podman 的机器上。
容器运行时支持
Aspire 同时支持 Docker 与 Podman。Podman 常见于强调安全性、无守护进程、无 root 的环境。
自动检测
部署时,Aspire 会并行探测 Docker 与 Podman,并按以下优先级选择:
- 正在运行的运行时优先于「仅已安装」的运行时。
- 两者都在运行时,Docker 优先。
检测结果会在本次操作内缓存。
查看检测结果
aspire doctor它会列出所有可用运行时及其状态、版本,以及当前生效的是哪一个。
强制指定运行时
设置 ASPIRE_CONTAINER_RUNTIME 环境变量可以跳过自动检测:
ASPIRE_CONTAINER_RUNTIME=podman aspire deploy设置后,aspire doctor 会显示所选运行时及原因(explicit configuration),即使 Docker 与 Podman 都在运行也会遵循该设置。
Podman 注意事项
需要 Podman 5.0.0 或更高版本
较老的 Podman(例如 Ubuntu 24.04 自带的 4.9.x)会被 aspire doctor 标记为「客户端版本低于最低要求」,并且不会被使用,即使它是唯一安装的运行时。请从厂商渠道安装 Podman 5+。
使用 Podman 时,Aspire 通过 podman-compose(或 Podman 的 Docker Compose v2 provider)执行 compose up / compose down;服务发现使用 podman ps --filter label=...。
前置条件
在 AppHost 中添加 Docker Compose 环境:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddDockerComposeEnvironment("env");
builder.AddProject<Projects.Api>("api");
// 添加完所有资源后运行
builder.Build().Run();无需逐个声明
只要 AppHost 中存在 Docker Compose 环境,所有资源都会自动发布为 Compose 服务,无需为每个资源额外开启。
发布与部署工作流
Aspire 为 Docker Compose 提供了渐进式工作流,可以分步执行,也可以一次完成。
1. 发布(生成产物)
生成 Compose 文件与相关产物,不构建容器镜像:
aspire publish产物形如:
aspire-output/
├── docker-compose.yaml
├── docker-compose.override.yaml
├── .env
└── ...2. 部署
aspire deploy它会构建并推送/加载镜像,然后执行 Compose 启动。
3. 拆除
aspire destroy参数化环境变量
生成的 .env 文件中,机密与环境相关值以占位符形式存在,需要在部署环境提供真实值:
# .env
API_KEY=${API_KEY}
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}与外部参数联动
AppHost 中通过 AddParameter("api-key", secret: true) 声明的参数,会出现在生成的产物中并等待注入。详见外部参数与机密。
生产使用建议
- 固定镜像版本:用
WithImageTag()或明确的版本标签,避免latest。 - 显式使用数据卷:容器重启后数据不应丢失,见数据持久化。
- 不要在 Compose 环境里跑开发用的管理界面(pgAdmin、Redis Commander 等),这些资源只应存在于开发配置中。
- 把产物纳入版本控制或 GitOps 流程,让部署内容可审查。
与 AddDockerComposeEnvironment 之外的差异
| 场景 | 行为 |
|---|---|
| 未声明任何环境资源 | aspire publish 生成的是通用清单,需自行消费。 |
| 声明了 Compose 环境 | 生成可直接 docker compose up 的产物。 |
| 同时声明 K8s 环境 | 两套产物分别生成,互不影响。 |





