Lösung auf docker run "--env-Datei" geliefert-Datei nicht ausgewertet wird, wie erwartet

Mein Aktuelles setup für den Betrieb ein docker-container ist auf den Linien dieses:

  1. Ich habe eine main.env Datei:
# Main 
export PRIVATE_IP=\`echo localhost\` 
export MONGODB_HOST="$PRIVATE_IP" 
export MONGODB_URL="mongodb://$MONGODB_HOST:27017/Entwicklung"
  1. In meinem service-Datei (upstart), ich source diese Datei . /path/to/main.env

  2. Ich dann rufen Sie docker run mit mehreren -e für jeden von der Umgebungsvariablen ich möchte innerhalb des Containers. In diesem Fall würde ich so etwas wie: docker run -e MONGODB_URL=$MONGODB_URL ubuntu bash

  3. Ich würde dann erwarten, dass MONGODB_URL im inneren des Behälters, um gleich mongodb://localhost:27017/development. Beachten Sie, dass in der Realität echo localhost wird ersetzt durch eine curl amazon-api, die für eine aktuelle PRIVATE_IP.

Wird dadurch ein wenig unhandlich werden, wenn Sie beginnen, mehr und mehr Umwelt-Variablen, die Sie brauchen zu geben, Ihre container. Es ist ein feiner Punkt, um zu sehen, was hier ist, dass die Umgebungsvariablen aufgelöst werden müssen zur Laufzeit, wie mit einem Aufruf zu curl oder durch Bezugnahme auf andere env-Variablen.

Die Lösung, die ich hoffte zu verwenden ist:

  1. aufrufen docker run mit einem --env-file parameter wie diese:
# Main 
PRIVATE_IP=\`echo localhost\` 
MONGODB_HOST="$PRIVATE_IP" 
MONGODB_URL="mongodb://$MONGODB_HOST:27017/Entwicklung"
  1. Dann meine docker run Befehl würden deutlich verkürzt werden, um docker run --env-file=/path/to/main.env ubuntu bash (keep in mind normalerweise habe ich rund 12-15 Umgebungsvariablen.

Dies ist, wo ich traf mein problem ist, dass im inneren des Behälters keine der Variablen zu lösen, wie erwartet. Stattdessen Ende ich mit:

  • PRIVATE_IP=`echo localhost`
  • MONGODB_HOST="$PRIVATE_IP"
  • MONGODB_URL="mongodb://$MONGODB_HOST:27017/Entwicklung"

Ich könnte dies umgehen, indem Sie Folgendes tun:

  1. Beschaffung der main.env Datei.
  2. Erstellen Sie eine Datei enthält nur die Namen der Variablen, die ich will (die Bedeutung der Hafenarbeiter würde die Suche nach Ihnen in der Umgebung).
  3. Dann ruft docker run mit dieser Datei als argument an --env-file. Das würde funktionieren, würde aber bedeuten, ich müsste warten zwei Dateien statt einer, und wirklich nicht groß, der eine Verbesserung der aktuellen situation.

Was ich vorziehen würde, ist, um die Variablen zu lösen, wie erwartet.

Die nächste Frage zu mir, dass ich finden konnte ist:
12factor config Ansatz mit Docker

  • Ich bemerkte, dass Ihre main.env ist Ihre Einstellung vars als literal-Zeichenfolgen. Haben Sie versucht, entfernen " & '? Lesen Sie mehr darüber, wie Docker verarbeitet Literale hier: docs.docker.com/reference/builder/#env
  • Nach docs in der env-Datei-syntax sollte einfach sein, die Schlüssel=Wert-Gegenstände. Nicht sicher, wie Sie die "export" behandelt werden würde in Ihrem Fall.
InformationsquelleAutor rikonor | 2014-12-20
Schreibe einen Kommentar