Is there way in docker compose to create the cross service constant? Is there way in docker compose to create the cross service constant? docker docker

Is there way in docker compose to create the cross service constant?


There are a couple options. If you deploy with docker-compose and not docker stack deploy, then you can use a .env file to set variables. Or with either docker-compose or swarm mode, you can set an environment variable in your shell (often a shell script used to deploy the app). Inside of the yaml, you would use the environment variable like:

service1:  environment:  - PROPservice2:  environment:  - PROPservice2:  environment:  - PROP

or explicitly use the variable like:

service1:  environment:  - PROP=${PROP}service2:  environment:  - PROP=${PROP}service3:  environment:  - PROP=${PROP}

If you have a .env file and want to do a docker stack deploy, you can script the processing of that with either of:

# option 1, leaves vars set in shellset -a && . .env && set +a && docker stack deploy -c compose.yml stack_name# option 2, only sets vars for single commandenv $(cat .env | xargs) docker stack deploy -c compose.yml stack_name

In each of the above, the .env is just the variables you could otherwise set in your shell:

PROP=some_common_value

The next option is to use Yaml syntax of anchors and aliases. This copies from one section of a Yaml file to another (to support merging in service3, I switched to key/value instead of the array syntax):

service1:  environment: &common_env    PROP: "some_common_value"service2:  environment: *common_envservice3:  environment:    <<: *common_env    PROP3: "unique value"

To allow each service to have unique values, Docker added extension fields in recent versions of the compose syntax. This lets you define an anchor separate from any of the service definitions and merge it into each service, each with their own unique values, e.g.:

version: '3.4'x-common-env: &common_env  PROP: "some_common_value"services:  service1:    environment:      <<: *common_env      PROP1: "unique value 1"  service2:    environment:      <<: *common_env      PROP2: "unique value 2"  service3:    environment:      <<: *common_env      PROP3: "unique value 3"