Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reload environment variables in docker-compose container with minimum downtime?

docker-compose.yml

version: '2' services:   app:     build:       context: .     command: python src/app.py     restart: on-failure     depends_on:       - db     environment:       - TJBOT_DB_HOST=db       - TJBOT_API_KEY       - TJBOT_AUTO_QUESTION_TIME     env_file:       - .env   db:     image: mongo:3.0.14     volumes:       - mongodbdata:/data/db volumes:   mongodbdata: 

If I change the .env file, how could I reload the container to use the new environment variables with minimum downtime?

like image 922
Marcos Costa Pinto Avatar asked Feb 10 '17 00:02

Marcos Costa Pinto


People also ask

How do I refresh docker environment settings?

If you are running the yml with docker-compose, you can just run docker-compose up -d and it will recreate any containers that have changes and leave all unchanged services untouched.

Can you use environment variables in Docker compose?

In Docker Compose, IT admins can use environment variables to generalize configurations for different situations, deployment environments and security contexts without editing the main project file(s) manually. Variables can either be passed as command-line arguments -- suitable for only a few parameters -- or via a .

Does Docker compose auto restart?

Like the restart Docker command, Docker Compose includes the restart property to restart containers automatically.


1 Answers

If you are running the yml with docker-compose, you can just run docker-compose up -d and it will recreate any containers that have changes and leave all unchanged services untouched.

$ cat docker-compose.env2.yml version: '2'  services:   test:     image: busybox     # command: env     command: tail -f /dev/null     environment:       - MY_VAR=hello       - MY_VAR2=world   test2:     image: busybox     command: tail -f /dev/null     environment:       - MY_VAR=same ole same ole  $ docker-compose -f docker-compose.env2.yml up -d                                                Creating network "test_default" with the default driver Creating test_test_1 Creating test_test2_1  $ vi docker-compose.env2.yml # edit the file to change MY_VAR  $ docker-compose -f docker-compose.env2.yml up -d Recreating test_test_1 test_test2_1 is up-to-date 

If you run the containers as a docker stack deploy -c docker-compose.yml with a version 3 file format, you can do a rolling update of the service which will prevent any downtime if you have multiple instances of your service running. This functionality is still very new, you'll want 1.13.1 to fix some of the issues with updates, and as with anything this new, bugs are still being worked out.

like image 67
BMitch Avatar answered Oct 04 '22 20:10

BMitch