在 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 分别分配给 frontend 和 debug 配置文件,因此仅当其各自的配置文件启用时才启动。
没有 profiles 属性的服务始终启用。在这种情况下,运行 docker compose up 将只启动 backend 和 db。
有效的配置文件名称遵循 [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.yaml 文件中,这将启动 db、backend 和 phpmyadmin 服务。
启动多个配置文件
您还可以启用多个配置文件,例如,使用 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 "*"。
自动启动配置文件和依赖项解析
当您在命令行上明确指定具有一个或多个已分配配置文件的服务时,您无需手动启用配置文件,因为 Compose 将运行该服务,无论其配置文件是否已激活。这对于运行一次性服务或调试工具非常有用。
只启动指定的服务(以及通过 depends_on 声明的任何依赖项)。除非以下情况,否则共享相同配置文件的其他服务将不会启动
- 它们也被明确指定,或者
- 配置文件通过
--profile或COMPOSE_PROFILES明确启用。
当在命令行上明确指定具有已分配 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 (no profiles involved)
$ docker compose up -d
# Run the db-migrations service without manually enabling the 'tools' profile
$ docker compose run db-migrations在此示例中,即使 db-migrations 分配给 tools 配置文件,它也会运行,因为它被明确指定。db 服务也会自动启动,因为它在 depends_on 中列出。
如果目标服务具有也受配置文件保护的依赖项,您必须确保这些依赖项要么
- 在同一个配置文件中
- 单独启动
- 未分配任何配置文件,因此始终启用
停止具有特定配置文件的应用程序和服务
与启动特定配置文件一样,您可以使用 --profile 命令行选项或使用 COMPOSE_PROFILES 环境变量
$ docker compose --profile debug down
$ COMPOSE_PROFILES=debug docker compose down
这两个命令都停止并删除具有 debug 配置文件和服务(没有配置文件)的服务。在以下 compose.yaml 文件中,这将停止 db、backend 和 phpmyadmin 服务。
services:
frontend:
image: frontend
profiles: [frontend]
phpmyadmin:
image: phpmyadmin
depends_on: [db]
profiles: [debug]
backend:
image: backend
db:
image: mysql如果您只想停止 phpmyadmin 服务,可以运行
$ docker compose down phpmyadmin
或
$ docker compose stop phpmyadmin
注意运行
docker compose down只会停止backend和db。