2017-06-28 1 views
1

Avec une application Spring Boot, nous utilisons le fichier application.yml pour stocker les propriétés. J'ai une tâche pour donner à un utilisateur la possibilité de remplacer certaines propriétés lors du démarrage d'une application. Prenant en considération que nous avons dockerised notre fichier de docker-composer d'application est l'endroit très juste que je crois pour cela. J'ai trouvé une option qui fonctionne réellement, env_file:propriétés de l'application override-composer override

backend: 
    build: 
     context: backend 
     dockerfile: Dockerfile.backend 
    restart: always 
    ports: 
     - 3000:3000 
    env_file: 
     - backend/custom.env 
    volumes: 
     - ../m2_repo:/root/.m2/ 
     - ../{APP_NAME}/data_sources:/backend/data_sources/ 
    links: 
     - database 
    networks: 
     main: 
     aliases: 
      - backend 

Cela résout parfaitement ma tâche et toutes les paires CLEF = valeur Remplace existante dans application.yml propriétés. Cependant, j'ai 2 questions:

  1. Il est apparu que plusieurs services ayant dans mon dossier docker-Compose je dois spécifier un env_file pour chaque service, ce qui est sans doute pas très pratique. Est-il possible d'avoir un fichier env_file commun pour l'ensemble du fichier docker-composer?

  2. Je sais que pour la commande d'exécution docker-compose, il y a une option -e où je peux mettre des paires clé = valeur de variables env. Y at-il une option similaire pour docker-composer? Je veux dire pour ne pas utiliser env_file du tout.

+0

Pourquoi est-1) un problème ? Est-ce que tous vos services requièrent les mêmes propriétés? N'y a-t-il pas de chevauchement si vous utilisez un fichier env_file commun? –

+0

Ce n'est pas un problème, je cherche plutôt une option. Mes propriétés ne se chevauchent pas, c'est pourquoi je considère avoir un seul fichier env plutôt que plusieurs fichiers (un pour chaque service) – Viacheslav

Répondre

0

Ad 1: Ce n'est pas possible. Je crois aussi qu'il est intentionnel - pour que le développeur définisse quel conteneur a accès à quelles données .env.

Annonce 2: Non, vous ne pouvez pas fournir les variables à l'aide d'un paramètre d'exécution de commande de updocker-compose (course docker-compose help up pour voir le params d'exécution disponibles). Mais vous pouvez définir ces utilisant la clause environment à partir d'un fichier de composition, comme:

restart: always 
ports: 
    - 3000:3000 
env_file: 
    - backend/custom.env 
environment: 
    - DB_PASSWORD   # <= #1 
    - APP_ENV=production # <= #2 

ie.

  1. soit juste un nom du var env - sa valeur est alors prise de la machine hôte
  2. ou toute définition pour créer un nouveau être disponible dans un conteneur

Voir la clause docs sur environment pour plus de précisions.

Une autre chose que vous pouvez faire pour remplacer certains paramètres est de extend le fichier de composition en utilisant un parent. Docs on extends clause

Malheureusement dès maintenant, extends ne fonctionnera pas lors de l'utilisation de la version fichier Compose 3, mais il est en cours de discussion dans ce github issue, donc nous espérons qu'il sera bientôt disponible :)