47 votes

Comment recharger des variables d'environnement dans un conteneur docker-compose avec un temps d'arrêt minimal?

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:
 

Si je modifie le fichier .env , comment pourrais-je recharger le conteneur pour utiliser les nouvelles variables d'environnement avec un temps d'indisponibilité minimal?

68voto

BMitch Points 3744

Si vous exécutez la yml avec docker-composer, vous pouvez simplement exécuter docker-compose up -d et il va recréer tous les contenants qui ont des changements et de laisser tous les services, sans changement intacte.

$ 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

Si vous exécutez les conteneurs comme un docker stack deploy -c docker-compose.yml avec une version 3 de format de fichier, vous pouvez faire un roulement de mise à jour du service qui permettra d'éviter tout temps d'arrêt si vous avez plusieurs instances de votre service en cours d'exécution. Cette fonctionnalité est encore très nouveau, vous aurez envie 1.13.1 pour résoudre certains des problèmes avec les mises à jour, et comme avec n'importe quoi cette nouvelle, les bugs sont toujours en cours d'élaboration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X