With profiles you can define a set of active profiles so your Compose application model is adjusted for various usages and environments. The exact mechanism is implementation specific and may include command line flags, environment variables, etc.
The services top-level element supports a profiles
attribute to define a list of named profiles.
Services without a profiles
attribute are always enabled.
A service is ignored by Compose when none of the listed profiles
match the active ones, unless the service is
explicitly targeted by a command. In that case its profile is added to the set of active profiles.
Note
All other top-level elements are not affected by
profiles
and are always active.
References to other services (by links
, extends
or shared resource syntax service:xxx
) do not
automatically enable a component that would otherwise have been ignored by active profiles. Instead
Compose returns an error.
services:
foo:
image: foo
bar:
image: bar
profiles:
- test
baz:
image: baz
depends_on:
- bar
profiles:
- test
zot:
image: zot
depends_on:
- bar
profiles:
- debug
In the above example:
- If the Compose application model is parsed with no profile enabled, it only contains the
foo
service. - If the profile
test
is enabled, the model contains the servicesbar
andbaz
, and servicefoo
, which is always enabled. - If the profile
debug
is enabled, the model contains bothfoo
andzot
services, but notbar
andbaz
, and as such the model is invalid regarding thedepends_on
constraint ofzot
. - If the profiles
debug
andtest
are enabled, the model contains all services;foo
,bar
,baz
andzot
. - If Compose is executed with
bar
as the explicit service to run,bar
and thetest
profile are active even iftest
profile is not enabled. - If Compose is executed with
baz
as the explicit service to run, the servicebaz
and the profiletest
are active andbar
is pulled in by thedepends_on
constraint. - If Compose is executed with
zot
as the explicit service to run, again the model is invalid regarding thedepends_on
constraint ofzot
, sincezot
andbar
have no commonprofiles
listed. - If Compose is executed with
zot
as the explicit service to run and profiletest
is enabled, profiledebug
is automatically enabled and servicebar
is pulled in as a dependency starting both serviceszot
andbar
.
See how you can use profiles
in Docker Compose.