2017-06-28 5 views
1

Mit einer Spring-Boot-Anwendung verwenden wir application.yml-Datei zum Speichern von Eigenschaften. Ich habe eine Aufgabe, um einem Benutzer die Möglichkeit zu geben, einige Eigenschaften beim Starten einer Anwendung zu überschreiben. Unter Berücksichtigung haben wir unsere App Docker-Andocken-Datei dockerisiert, ist der richtige Ort, glaube ich dafür. Ich fand eine Option, die tatsächlich funktioniert, env_file:docker-compose override Anwendungseigenschaften

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 

Dies löst perfekt meine Aufgabe und alle KEY = außer Kraft setzen Wertepaare in application.yml Eigenschaften vorhanden sind. Aber ich habe 2 Fragen:

  1. Es zeigte sich, dass mehrere Dienste in meinem Docker-compose Datei mit Ich brauche einen separaten env_file für jeden Dienst angeben, die wahrscheinlich nicht sehr bequem ist. Gibt es eine Möglichkeit, eine gemeinsame env_file für die gesamte docker-compose-Datei zu haben?

  2. Ich weiß, dass für docker-compose run-Befehl gibt es eine Option -e, wo ich Schlüssel = Wert-Paare von env Variablen setzen kann. Gibt es eine ähnliche Option für Docker-Compose? Ich meine, um env_file überhaupt nicht zu benutzen.

+0

Warum ist 1) ein Problem ? Erfordern alle Ihre Dienste die gleichen Eigenschaften? Gibt es keine Überschneidungen, wenn Sie eine gemeinsame env_file verwenden? –

+0

Es ist kein Problem, eher suche ich nach einer Option. Meine Eigenschaften sind nicht überlappend, das ist eigentlich der Grund, warum ich eine einzelne env_file statt mehrerer Dateien (eine für jeden Dienst) in Erwägung ziehe. – Viacheslav

Antwort

0

Anzeige 1: Es ist nicht möglich. Ich glaube auch, dass es absichtlich ist - den Entwickler zu definieren, welcher Container Zugriff auf welche Daten hat.

Ad 2: Nein, Sie können die Variablen nicht mit einem Laufzeitparameter von up Befehl docker-compose liefern (führen Sie docker-compose help up, um die verfügbaren Laufzeitparameter zu sehen). Aber Sie können diese mit environment Klausel aus einer compose Datei definieren, wie:

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

dh.

  1. entweder nur ein Name der env var - wird der Wert dann
  2. oder die gesamten Definition von der Host-Maschine genommen einen neuen zu schaffen, in einen Behälter
zur Verfügung steht

Weitere Informationen finden Sie unter docs unter environment.

Eine andere Sache, die Sie tun können, um einige Einstellungen zu überschreiben, ist extend die Datei mit einem "übergeordneten" komponieren. Docs on extends clause

Leider jetzt als, extends wird nicht funktionieren, wenn compose Datei der Version 3 verwendet, aber es in diesen github issue wird, diskutiert so wird es hoffentlich in Kürze verfügbar sein :)

Verwandte Themen