2016-10-30 7 views
7

Ich habe eine Dockerfile und ich möchte die API konfigurierbar mit einem Standardwert machen.Dockerfile Overriding ENV-Variable

VON Socialengine/nginx-spa

ENV API_URL localhost: 6007

Also, wenn ich dieses Bild betreibe ich den lokalen Host außer Kraft setzen würde in der Lage sein: 6007 mit so etwas wie unten:

docker run -e API_URL = production.com: 6007 ui

Das funktioniert nicht und ich kann keine klare Erklärung dafür finden.

Irgendwelche Ratschläge?

Antwort

13

Was Sie beschrieben haben, sollte gut funktionieren. Gegeben:

$ cat Dockerfile 
FROM socialengine/nginx-spa 
ENV API_URL localhost:6007 
$ docker build -t ui . 
[...] 

Bedenken Sie:

$ docker run -it --rm ui env | grep API_URL 
API_URL=localhost:6007 

Im Vergleich zu:

$ docker run -it --rm -e API_URL='production:6007' ui env | grep API_URL 
API_URL=production:6007 

eine -e VARNAME=varvalue auf der docker run Befehlszeile übergeben wird eine Standard in Ihrem Dockerfile überschreiben.

Wenn Sie ein anderes Verhalten sehen, aktualisieren Sie bitte Ihre Frage, um genau den Befehl, den Sie ausführen, und die zugehörige Ausgabe anzuzeigen.

aktualisiert

ist das komplette Beispiel für Ihre Sehvergnügen aufgezeichnet:

https://asciinema.org/a/a5a2n3exlyh4jkii4k0ivvqmd

+0

Vielen Dank für die Antwort. Aber ich denke nicht, dass das ein gültiger Docker-Befehl ist, den du mir gegeben hast. Es versucht, das Image ENV zu erstellen. – Proximo

+0

Äh, was? Das sind perfekt gültige Docker-Befehle. Beachten Sie, dass der Bildname in beiden Beispielen "ui" ist. Und das sind "Docker Run" -Befehle, sie werden nichts bauen. Sie könnten versuchen, ein Bild zu ziehen, wenn Sie etwas falsch schreiben. – larsks

+1

Interessant, es hat nicht funktioniert, aber deine Antwort hat mir geholfen, mein Problem herauszufinden. Ich habe versucht, die ENV-Variable im RUN-Abschnitt zu verwenden, wenn ich es als CMD verwenden sollte. Entschuldigung für die vage Frage. +1 für asciinema.org. – Proximo