在 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
command-line 选项或
使用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
flags 或
一个以逗号分隔的列表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
profile 添加到db
服务:
db:
image: mysql
profiles: ["debug", "dev"]
或启动dev
profile 显式地:
# Profiles "debug" is started automatically by targeting phpmyadmin
$ docker compose --profile dev up phpmyadmin
$ COMPOSE_PROFILES=dev docker compose up phpmyadmin
停止特定配置文件
与启动特定配置文件一样,您可以使用--profile
command-line 选项或
使用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
.