首页/云/Docker 容器速查/compose profiles 分组启动
Compose 编排55 条

compose profiles 分组启动

给服务打 profiles 标签实现按需启动:up 默认只起无 profile 的服务,需要时用 --profile 或 COMPOSE_PROFILES 激活整组服务。

Docker 容器速查云更新于 2026-10-13

profiles 是干什么的

profiles 让同一份编排文件里的服务按组选择性启动:带 profile 的服务只有在该组被激活时才会启动,没有 profile 的服务始终启动。它适合把调试工具、监控组件与一次性任务和主业务放进同一份文件,平时互不干扰,需要时一条命令拉起整组。

基本信息

用途给服务分组并按需启动
激活方式命令行指定 profile 或通过环境变量
规则未标 profile 的服务始终启动
适用场景调试工具、监控组件、一次性任务
注意未激活时相关服务不参与常规操作

典型使用场景

  • 把调试工具箱与主业务放在同一份文件
  • 监控组件按环境决定是否启动
  • 一次性任务按需触发,例如初始化或数据迁移
  • 用环境变量统一激活某一组服务
  • 排查服务为什么没起来时确认是否 profile 未激活

文件中的分组

文件中的分组
services:
  api:
    image: app/api:1.4.2
  debug-tools:
    image: nicolaka/netshoot
    profiles: [debug]           # 仅在激活 debug 组时启动
    command: sleep infinity
  metrics:
    image: prom/prometheus
    profiles: [monitoring]

激活与核对

激活与核对
docker compose --profile debug up -d                 # 激活整组服务
COMPOSE_PROFILES=monitoring docker compose up -d     # 用环境变量激活
docker compose --profile debug ps                   # 查看该组下的服务状态
docker compose --profile debug logs --tail=20        # 查看该组服务日志

操作与结果

操作结果注意
直接启动只起无 profile 的服务带 profile 的服务不会启动
指定 profile该组服务一并启动可同时指定多个组
环境变量激活适用于脚本与流水线注意不要与命令行参数冲突
日志与执行命令未激活时看不到相关服务先确认当前是否带了 profile
该机制适合把调试、监控与一次性工具同主业务放进一份文件而互不干扰,减少维护多份编排文件的成本。
带 profile 的服务在未激活时对日志与执行类命令不可见,排查时先确认当前命令是否带上了对应的参数。

易错点

  • 服务没起来就怀疑配置错误:实际是 profile 未激活,先确认命令里是否带了对应用户参数
  • 依赖关系跨越 profile:被依赖方需要明确处理,否则激活时启动会报缺服务
  • 一次性任务标了 profile 又忘记激活:初始化步骤缺失,应用启动后连不到预期的数据结构
  • 环境变量与命令行参数叠加使用:容易产生难以预期的组合,脚本里固定一种激活方式更清晰

数据来源与参考

  • Docker 官方文档:Compose profiles(docs.docker.com/compose/profiles)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌