2017-10-23 5 views
0

Ich habe einen webapp Service in einer Docker-Compose-Datei definiert. Versuchen, dem Benutzer eine gewisse Flexibilität zu geben, um die Datenträgerbereitstellungen anzupassen. Ich habe viele Variationen versucht, alle ohne Erfolg, der mit dem meisten Versprechen ist:Kann Docker env-Variablen in Volumendefinitionen verwenden?

volumes: ['log-volume:/path/to/container/logs', 
       'data-volume:/path/to/container/data' ${WEBAPP_VOLUMES:-''}] 

Ich denke, das sollte die Umgebungsvariable auf einen leeren String Standard und alle sollten gut sein (dh WEBAPP_VOLUMES ist nicht in der definierten .env-Datei). Dann müsste man eine Definition mit einem Komma beginnen, nicht ideal, aber akzeptabel. Aber docker-compose hasst dies!

bekomme ich Fehler wie:

ERROR: yaml.scanner.ScannerError: while scanning a plain scalar 
    in "./docker-compose.yml", line 20, column 110 
found unexpected ':' 
    in "./docker-compose.yml", line 20, column 124 
Please check http://pyyaml.org/wiki/YAMLColonInFlowContext for details. 

jemand zu erreichen, weiß, was ich versuche, hier zu tun?

Antwort

2

Sicher, Docker kann Umgebungsvariablen in Volumendefinitionen verwenden, aber nicht so, wie Sie es versuchen. Variable Substitution passiert nach YAML Parsing. Die Syntax, die Sie verwenden möchten, führt zu einem YAML-Syntaxfehler (daher die Ausnahme yaml.scanner.ScannerError), sodass docker-compose die Konfiguration nicht einmal lesen kann. Sie können ein Tool wie this yaml parser verwenden, um die YAML-Syntax zu validieren.

So etwas würde gültige Syntax sein:

volumes: 
    - log-volume:/path/to/container/logs 
    - data-volume:/path/to/container/data 
    - ${WEBAPP_VOLUME}:/path/to/container/app 

... aber würde das nicht tun, was Sie wollen (die oben würden Sie die Quelle des /path/to/container/app mit einer Umgebungsvariablen montieren angeben, aber würde nicht lassen Sie diese Halterung optional machen, noch würde es Sie magisch in mehrere verschiedene Halterungen erweitern lassen.

Sie finden können Sie das extends Schlüsselwort (beschrieben in Extending services) verwenden, um das Verhalten Ihr wollen zu bekommen, obwohl die Unterstützung für dieses Keyword wurde in Version 3 und später der compose Dateiformat weggefallen.

+0

Ja, Sie haben Recht -> Ich brauche Definitionen, die OPTIONAL mounts, wie für HTTPS-Zertifikate und was nicht zulassen würde. Was Sie zeigen, würde sicherlich funktionieren, ist aber ein Muss. Außerdem sind wir gerade zur Version 3.2 gewechselt ... – JoeG

Verwandte Themen