使用 Compose 配置文件
配置文件(Profiles)可帮助您通过有选择地激活服务,为不同的环境或用例调整您的 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.yml 文件中,这将启动服务
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 "*"。
自动启动配置文件和依赖解析
当在命令行中显式指定分配了 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
停止特定配置文件
与启动特定配置文件一样,您可以使用 --profile
命令行选项 或
使用
COMPOSE_PROFILES 环境变量:
$ docker compose --profile debug down
$ COMPOSE_PROFILES=debug docker compose down
这两个命令都会停止并移除带有 debug 配置文件的服务。在下面的 compose.yml 文件中,这将停止服务 db 和 phpmyadmin。
services:
frontend:
image: frontend
profiles: [frontend]
phpmyadmin:
image: phpmyadmin
depends_on: [db]
profiles: [debug]
backend:
image: backend
db:
image: mysql注意
运行
docker compose down仅会停止backend和db。