2015-12-16 7 views

Antwort

48

Jetzt docker-compose unterstützt Variablensubstitution.

Compose verwendet die Variablenwerte aus der Shell-Umgebung, in der docker-compose ausgeführt wird. Beispiel: Angenommen, die Schale enthält POSTGRES_VERSION=9.3 und Sie liefern diese Konfiguration in Ihrer docker-compose.yml Datei.

db: 
    image: "postgres:${POSTGRES_VERSION}" 

Wenn Sie docker-compose up mit dieser Konfiguration laufen, sieht Compose für die POSTGRES_VERSION Umgebungsvariable in der Schale und ersetzt seinen Wert in für In diesem Beispiel behebt Compose die image bis postgres:9.3, bevor die Konfiguration ausgeführt wird.

+3

Argumente erstellen ist ein Docker 1.9-Feature, die Frage, wie Docker Compose zu verwenden, um sie zu verwenden. Variablensubstitution ist nicht verwandt. – Jack

+5

@Jack Ich weiß, dass dies keine direkte Antwort auf die Frage ist, aber es könnte eine Umgehungslösung sein, da das 'docker-compose' keine Übergabe von Argumenten unterstützt. –

+7

@Jack Ich kam hier auf der Suche nach Variablensubstitution, so dass dies für mich hilfreich war – Andy

59

Dies kann jetzt als docker-compose v2 + als Teil des Objekts build durchgeführt werden;

Docker-compose.yml

version: '2' 
services: 
    my_image_name: 
     build: 
      context: . #current dir as build context 
      args: 
       var1: 1 
       var2: c 

Siehe the docker compose docs.

Im obigen Beispiel werden "var1" und "var2" an die Build-Umgebung gesendet.

Hinweis: Alle Env-Variablen (die mit dem Block environment angegeben werden), die denselben Namen wie args Variable (n) haben, überschreiben diese Variable.

+0

Danke für den 'context' Teil, es fehlt in den Dokumenten. –

+0

@tfg Wissen Sie, ob die 'args'-Tasten in Kleinbuchstaben geschrieben sein müssen? Die Dokumente und alle Beispiele, die ich gesehen habe, verwenden Kleinbuchstaben, aber ich habe keine Erwähnung davon gesehen, dass _erforderlich_ ist. – pdoherty926

+0

@ pdoherty926 Dies sollte nur bash Variable Expansion sein, so Groß-und Kleinschreibung mit Unterstrichen sollte in Ordnung sein. – tgallacher

Verwandte Themen