在 Compose 中使用配置文件

配置文件通过选择性地激活服务,帮助您针对不同的环境或用例调整 Compose 应用程序。可以将服务分配给一个或多个用户档案;默认情况下,未分配的服务会启动,而已分配的服务仅在其配置文件处于活动状态时启动。此设置意味着特定服务(如用于调试或开发的服务)将包含在单个文件中,并且仅在需要时激活。compose.yml

将配置文件分配给服务

服务通过 profiles 属性与 profiles 关联,该属性采用 配置文件名称数组:

services:
  frontend:
    image: frontend
    profiles: [frontend]

  phpmyadmin:
    image: phpmyadmin
    depends_on: [db]
    profiles: [debug]

  backend:
    image: backend

  db:
    image: mysql

在这里,服务 和 被分配给用户档案 和 分别 ,因此仅在其 启用相应的配置文件。frontendphpmyadminfrontenddebug

没有属性的服务始终处于启用状态。在这个 case running 只会启动 和 。profilesdocker compose upbackenddb

有效的配置文件名称遵循 的正则表达式格式。[a-zA-Z0-9][a-zA-Z0-9_.-]+

提示

应用程序的核心服务不应分配,因此 它们始终处于启用状态并自动启动。profiles

启动特定配置文件

要启动特定配置文件,请提供命令行选项或 使用 COMPOSE_PROFILES 环境变量--profile

$ docker compose --profile debug up
$ COMPOSE_PROFILES=debug docker compose up

这两个命令都在启用配置文件的情况下启动服务。 在上一个文件中,这将启动 services 和 .debugcompose.ymldbbackendphpmyadmin

启动多个配置文件

您还可以启用 多个配置文件,例如,使用 Profiles 和 将启用。docker compose --profile frontend --profile debug upfrontenddebug

可以通过传递多个标志或 环境变量的逗号分隔列表:--profileCOMPOSE_PROFILES

$ docker compose --profile frontend --profile debug up
$ COMPOSE_PROFILES=frontend,debug docker compose up

如果要同时启用所有配置文件,可以运行 。docker compose --profile "*"

自动启动配置文件和依赖项解析

当命令中明确定位了已分配的服务 行,其配置文件会自动启动,因此您无需启动它们 手动地。这可用于一次性服务和调试工具。 例如,请考虑以下配置:profiles

services:
  backend:
    image: backend

  db:
    image: mysql

  db-migrations:
    image: backend
    command: myapp migrate
    depends_on:
      - db
    profiles:
      - tools
# Only start backend and db
$ docker compose up -d

# This runs db-migrations (and,if necessary, start db)
# by implicitly enabling the profiles `tools`
$ docker compose run db-migrations

但请记住,只有 API 浏览器才会自动启动 命令行上的服务配置文件,而不是任何依赖项的配置文件。docker compose

这意味着目标服务的任何其他服务应:depends_on

  • 共享通用配置文件
  • 始终通过省略或显式启动匹配的配置文件来启动profiles
services:
  web:
    image: web

  mock-backend:
    image: backend
    profiles: ["dev"]
    depends_on:
      - db

  db:
    image: mysql
    profiles: ["dev"]

  phpmyadmin:
    image: phpmyadmin
    profiles: ["debug"]
    depends_on:
      - db
# Only start "web"
$ docker compose up -d

# Start mock-backend (and, if necessary, db)
# by implicitly enabling profiles `dev`
$ docker compose up -d mock-backend

# This fails because profiles "dev" is not enabled
$ docker compose up phpmyadmin

虽然定位会自动启动用户档案 ,但它不会自动启动其中所需的用户档案。phpmyadmindebugdbdev

要解决此问题,您必须将配置文件添加到服务中:debugdb

db:
  image: mysql
  profiles: ["debug", "dev"]

或显式启动配置文件:dev

# Profiles "debug" is started automatically by targeting phpmyadmin
$ docker compose --profile dev up phpmyadmin
$ COMPOSE_PROFILES=dev docker compose up phpmyadmin

停止特定配置文件

与启动特定配置文件一样,您可以使用命令行选项 或 使用 COMPOSE_PROFILES 环境变量--profile

$ docker compose --profile debug down
$ COMPOSE_PROFILES=debug docker compose down

这两个命令都使用配置文件停止和删除服务。在以下文件中,这将停止 services 和 .debugcompose.ymldbphpmyadmin

services:
  frontend:
    image: frontend
    profiles: [frontend]

  phpmyadmin:
    image: phpmyadmin
    depends_on: [db]
    profiles: [debug]

  backend:
    image: backend

  db:
    image: mysql

注意

Running only stops 和 .docker compose downbackenddb

参考资料

profiles