web-dev-qa-db-ger.com

Wie definiere ich eine Variable in einem Dockerfile?

In meinem Dockerfile möchte ich Variablen definieren das kann ich später im Dockerfile verwenden.

Mir ist die Anweisung ENV bekannt, aber ich möchte nicht, dass diese Variablen Umgebungsvariablen sind.

Gibt es eine Möglichkeit, Variablen im Dockerfile-Bereich zu deklarieren?

107
Maxime

Sie können ARG verwenden - siehe https://docs.docker.com/engine/reference/builder/#arg

Die Anweisung ARG definiert eine Variable, die Benutzer zur Build-Zeit mit dem Befehl docker build Und dem Flag --build-arg <varname>=<value> An den Builder übergeben können. Wenn ein Benutzer ein Build-Argument angibt, das nicht in der Docker-Datei definiert wurde, gibt der Build einen Fehler aus.

83
lumos0815

Meines Wissens erlaubt dies nur ENV, wie in " mgebungsersetzung " erwähnt.

Umgebungsvariablen (mit der Anweisung ENV deklariert) können in bestimmten Anweisungen auch als Variablen verwendet werden, die von der Docker-Datei interpretiert werden.

Sie müssen Umgebungsvariablen sein, um in jedem neuen Container neu deklariert zu werden, der für jede Zeile der Docker-Datei mit docker build Erstellt wurde.

Mit anderen Worten, diese Variablen werden nicht direkt in einer Docker-Datei interpretiert, sondern in einem Container, der für eine Docker-Datei-Zeile erstellt wurde, weshalb Umgebungsvariablen verwendet werden.


An diesem Tag verwende ich sowohl ARG ( docker 1.10+ und docker build --build-arg var=value ) als auch ENV .
Nur ARG zu verwenden bedeutet, dass Ihre Variable zur Erstellungszeit sichtbar ist, nicht zur Laufzeit.

Mein Dockerfile hat normalerweise:

ARG var
ENV var=${var}

In Ihrem Fall reicht ARG: Ich verwende es normalerweise, um die http_proxy-Variable festzulegen, die Docker-Build für den Zugriff auf das Internet zur Erstellungszeit benötigt.

43
VonC

Zur Beantwortung Ihrer Frage:

In meinem Dockerfile möchte ich Variablen definieren, die ich später im Dockerfile verwenden kann.

Sie können eine Variable definieren mit:

ARG myvalue=3

Leerzeichen um das gleiche Zeichen sind nicht zulässig.

Und später verwenden mit:

RUN echo $myvalue > /test
20
Ortomala Lokni

Wenn die Variable innerhalb derselben Anweisung RUN wiederverwendet wird, kann man einfach eine Shell-Variable setzen. Ich mag es wirklich, wie sie das mit dem official Ruby Dockerfile angegangen sind.

11