The extends
option can be nice but it’s not supported in 3.x
compose files. Other ways to go are:
-
Extension fields (compose file 3.4+)
If you can use 3.4+ compose files, extension fields are probably the best option:
docker-compose.yml
version: '3.4' x-common-variables: &common-variables VARIABLE: some_value ANOTHER_VARIABLE: another_value services: some_service: image: someimage environment: *common-variables another_service: image: anotherimage environment: <<: *common-variables NON_COMMON_VARIABLE: 'non_common_value'
-
env_file directive
docker-compose.yml
version: '3.2' services: some_service: image: someimage env_file: - 'variables.env' another_service: image: anotherimage env_file: - 'variables.env'
variables.env
VARIABLE=some_value ANOTHER_VARIABLE=another_value
-
.env file in project root
(or variables at actual compose environment)Variables from .env file can be referenced in service configuration:
docker-compose.yml
version: '3.2' services: some_service: image: someimage environment: - VARIABLE another_service: image: anotherimage environment: - VARIABLE - ANOTHER_VARIABLE
.env
VARIABLE=some_value ANOTHER_VARIABLE=another_value