In meiner Docker-Datei möchte ich Variablen definieren, die ich später in der Docker-Datei verwenden kann .
Mir ist die ENV
Anweisung bekannt, aber ich möchte nicht, dass diese Variablen Umgebungsvariablen sind.
Gibt es eine Möglichkeit , Variablen im Dockerfile-Bereich zu deklarieren ?
variables
docker
dockerfile
Maxime
quelle
quelle
Antworten:
Sie können verwenden
ARG
- siehe https://docs.docker.com/engine/reference/builder/#argquelle
Meines Wissens
ENV
erlaubt dies nur , wie unter " Umgebungsaustausch " erwähntSie müssen Umgebungsvariablen sein, um in jedem neuen Container, der für jede Zeile der Docker-Datei von erstellt wurde, neu deklariert zu werden
docker build
.Mit anderen Worten, diese Variablen werden nicht direkt in einer Docker-Datei interpretiert, sondern in einem Container, der für eine Docker-Datei erstellt wurde, daher die Verwendung von Umgebungsvariablen.
An diesem Tag verwende ich sowohl
ARG
( Docker 1.10+ unddocker build --build-arg var=value
) als auchENV
.Mit
ARG
allein bedeutet , dass Ihre Variable bei der Erstellung sichtbar ist, nicht zur Laufzeit.Meine Docker-Datei hat normalerweise:
In Ihrem Fall
ARG
ist es genug: Ich verwende es normalerweise zum Festlegen der Variablen http_proxy, die der Docker-Build benötigt, um zur Build-Zeit auf das Internet zuzugreifen.quelle
Zur Beantwortung Ihrer Frage:
Sie können eine Variable definieren mit:
Leerzeichen um das gleiche Zeichen sind nicht zulässig.
Und verwenden Sie es später mit:
quelle
Wenn die Variable innerhalb derselben
RUN
Anweisung wiederverwendet wird , kann einfach eine Shell-Variable festgelegt werden. Mir gefällt sehr, wie sie dies mit der offiziellen Ruby Dockerfile angegangen sind .quelle
RUN foo=$(date) && echo $foo
Sie können
ARG variable defaultValue
diesen Wert verwenden und während des Ausführungsbefehls sogar mit aktualisieren--build-arg variable=value
. Um diese Variablen in der Docker-Datei zu verwenden, können Sie sie wie$variable
im Befehl run referenzieren .Hinweis: Diese Variablen sind für Linux-Befehle wie verfügbar
RUN echo $variable
und bleiben im Image nicht erhalten.quelle