将配置文件与 Compose 一起使用

配置文件可帮助您通过有选择地启动服务来调整 Compose 应用程序模型以适应各种用途和环境。这是通过将每个服务分配给零个或多个配置文件来实现的。如果未分配,则该服务始终启动,但如果已分配,则仅在激活配置文件时才启动。

这允许您在单个compose.yml文件中定义仅应在特定场景中启动的附加服务,例如用于调试或开发任务。

将配置文件分配给服务

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

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

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

  backend:
    image: backend

  db:
    image: mysql

这里,服务frontend和分别phpmyadmin分配给配置文件 frontenddebug,因此只有在启用各自的配置文件时才会启动。

没有属性的服务profiles始终处于启用状态。在这种情况下,运行docker compose up只会启动backenddb

有效的配置文件名称遵循[a-zA-Z0-9][a-zA-Z0-9_.-]+.

提示

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

启动特定配置文件

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

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

上述命令都将在debug启用配置文件的情况下启动您的应用程序。在上面的示例中compose.yml,文件将启动服务backenddbphpmyadmin

启动多个配置文件

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

可以通过传递多个--profile标志或环境变量的逗号分隔列表来指定多个配置文件COMPOSE_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

但请记住,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

尽管定位phpmyadmin会自动启动配置文件debug,但它不会自动启动db其所需的配置文件dev

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

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

参考信息

profiles