2016-08-03 36 views
1

Ich habe mehrere Container, die ich zusammen mit Docker-Compose laufen lasse. Einer von ihnen, ist mysql, die einige Variablen erfordert festgelegt. Ich habe diejenigen, die in einer .env Datei:Wie kann ich mehrere env-Variablen festlegen, die auf den gleichen Wert im Andockfenster zeigen?

MYSQL_USER='my_user' 
MYSQL_PASSWORD='my_password' 
MYSQL_ROOT_PASSWORD='supersecretpassword' 
MYSQL_DATABASE='my_database' 

Und ich bin in der Lage, die mysql Container erfolgreich zu starten.

Das Problem kommt, wenn ich einen anderen Dienst für db-Migrationen verwenden möchten, die die folgenden Variablen erfordern in der .env-Datei festgelegt:

SERVICE_DBUSER='my_user' 
SERVICE_DBPASSWORD='my_password' 
SERVICE_DBNAME='my_database' 

Und was würde ich schreiben möchte (dies nicht funktioniert), um Wiederholungen zu vermeiden, ist so etwas wie:

SERVICE_DBUSER="$MYSQL_USER" 
SERVICE_DBPASSWORD="$MYSQL_PASSWORD" 
SERVICE_DBNAME="$MYSQL_DATABASE" 

Aber docker nicht, dass erkennen und sie nicht mit der Substitution. In der docker docs heißt es auch, dass expects each line in an env file to be in VAR=VAL format.

Meine Frage ist, ist es möglich, die Wiederholung zu vermeiden?

Vielen Dank.

Antwort

2

Schreiben Sie substitute environment variables in die YAML-Datei, wenn Sie sie mit $VARIABLE oder ${VARIABLE} referenzieren.

Sie können weiterhin die Datei .env verwenden, um eine Standardumgebung festzulegen. Aber wenn Sie eine Variable verweisen möchten, setzen Sie es in den environment: Abschnitt des compose yaml.

environment: 
    SERVICE_DBUSER: "${MYSQL_USER}" 
    SERVICE_DBPASSWORD: "${MYSQL_PASSWORD}" 
    SERVICE_DBNAME: "${MYSQL_DATABASE}" 

Dann, wenn Sie festlegen oder eine alternative Umgebung beziehen, wenn docker-compose laufen haben, werden die neuen Werte in ersetzt bekommen

$ MYSQL_USER="other" MYSQL_PASSWORD="opass" docker-compose start