websites/ewintr.nl/content/2020/shared-environment-variable...

1.3 KiB

+++ title = "Shared environment variables for make, bash and docker" date = 2020-01-07 +++

It is possible to define a set of variables and share them in Make, Bash and the Docker containers that are orchestrated by docker-compose.

Docker-compose can use an .env file to substitute variables in a docker-compose.yml file in the same directory. In this docker-compose.yml they can be exported to the containers.

Incuding this .env file in your Makefile makes hem available there as well, but they are not automatically exported to the Bash shells that are spawned by make to execute the targets. This can be changed by adding the .EXPORTALLVARIABLES: target to your Makefile.

.env:

{% code() %} VAR1=this VAR2=that VAR3=those {% end %}

Makefile:

{% code() %} include .env

.EXPORT_ALL_VARIABLES:

task: @echo "VAR1 is ${VAR1}" @some_command # some_command can use $VAR1, $VAR2, $VAR3 @docker-compose up {% end %}

docker-compose.yml:

{% code() %} ... app: image: "registry/the_app:${VAR2}" environment: - VAR3=${VAR3} {% end %}

Sources