Verwenden Sie Umgebungsvariablen in CMD


82

Kann ich Umgebungsvariablen in meiner CMD-Zeilengruppe in einer Docker-Datei verwenden?

Ich möchte so etwas machen:

CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]

Wobei $ MEMCACHE_11211_TCP_ * durch die Aufnahme des Parameters --link von my automatisch gesetzt würde docker run Befehls . Und $ ARG kann vom Benutzer zur Laufzeit konfiguriert werden, möglicherweise über den Parameter "-e"?

Dies scheint bei mir nicht zu funktionieren, es scheint zum Beispiel buchstäblich durch die Zeichenfolge "$ ARG" zu gehen.

Antworten:


57

Diese Antwort kann etwas spät sein. Die Umgebung für CMDwird jedoch etwas anders interpretiert, je nachdem, wie Sie die Argumente schreiben. Wenn Sie das CMDals Zeichenfolge übergeben (nicht innerhalb eines Arrays), wird es als Shell anstelle von exec gestartet. Siehe https://docs.docker.com/engine/reference/builder/#cmd .

Sie können versuchen, die CMDSyntax ohne Array als Shell auszuführen:

CMD myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT


11

Beide Andys hatten es richtig. Die JSON-Syntax umgeht den Einstiegspunkt. Wenn Sie CMD wie in ihrem Beispiel verwenden, wird dies als Argument für den Standardeinstiegspunkt betrachtet, der die Umgebungsvariablen /bin/sh -cinterpretiert.

Docker wertet die Variablen in CMD in beiden Fällen nicht aus. Im ersten Fall wird der Befehl direkt aufgerufen, sodass nichts interpretiert wird. Im zweiten Fall werden die Variablen von interpretiert sh.


7

Ich kann sprechen nicht , wie es soll an der Arbeit, aber ich denke , wenn man dies als ein Shell - Skript aufgerufen, zBCMD runmyserver.sh , dann ist die Interpretation der Shell - Variablen verschoben werden würde , bis der CMD tatsächlich lief.

Also versuche

myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT`` 

als Shell-Skript?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.