How to pass environment array configuration properties with docker-compose dynamically?

Viewed 794

I have an ASP .NET Core Web API app that is deployed on a docker linux container.

Now I need to upgrade my app configuration including an emails array, it is not a problem until I need to pass this array using docker-compose.yml.

This is the C# code I use to retrieve the configuration:

List<string> emails = _config.GetSection("Checker:EMails").Get<List<string>>();

These are my linux environments variables as explained by microsoft:

export Checker__RefreshTime="86400000"
export Checker__DaysToCheck="15"

#emails array
export Checker__EMails__0="my_email1@my.com"
export Checker__EMails__1="my_email2p@my.com"

docker-compose.yml file:

environment:
            # the following line passes the host environment var to the container created from the image
            
            # Checker configuration
            - Checker__RefreshTime=${Checker__RefreshTime}
            - Checker__DaysToCheck=${Checker__DaysToCheck}

How can I include the emails array dynamically without the necessity to change docker-compose.yml file every time? Because now I need to do something like:

environment:
            # the following line passes the host environment var to the container created from the image
            
            # Checker configuration
            - Checker__RefreshTime=${Checker__RefreshTime}
            - Checker__DaysToCheck=${Checker__DaysToCheck}
            - Checker__EMails__0=${Checker__EMails__0}
            - Checker__EMails__1=${Checker__EMails__1}
            # etc..
1 Answers

You can use an file to store the environment variables and call the file from your docker-compose file. Instead of:

environment:
            - Checker__RefreshTime=${Checker__RefreshTime}
            - Checker__DaysToCheck=${Checker__DaysToCheck}
            - Checker__EMails__0=${Checker__EMails__0}
            - Checker__EMails__1=${Checker__EMails__1}

use:

env_file: filename.env
Related