Ich versuche, Umgebungsvariablen im Docker-Container während des Builds zu setzen, aber ohne Erfolg. Wenn Sie den Befehl run verwenden, funktioniert dies, aber ich muss sie während des Builds festlegen.
Dockerfile
FROM ubuntu:latest
ARG TEST_ENV=something
Befehl, mit dem ich baue
docker build -t --build-arg TEST_ENV="test" myimage .
Laufen
docker run -dit myimage
Ich überprüfe die verfügbaren Umgebungsvariablen mit
docker exec containerid printenv
und das Ergebnis ist
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=e49c1abfd58b
TERM=xterm
no_proxy=*.local, 169.254/16
HOME=/root
TEST_ENV ist nicht vorhanden
ARG
dient zum Festlegen von Umgebungsvariablen, die während des Vorgangs docker build
verwendet werden. Sie sind im endgültigen Abbild nicht vorhanden. Aus diesem Grund werden sie bei Verwendung von docker run
nicht angezeigt. ].
Sie verwenden ARG
für Einstellungen, die nur relevant sind, wenn das Image erstellt wird und nicht von Containern benötigt werden, die Sie vom Image ausführen. Sie können ENV
für Umgebungsvariablen verwenden, die während des Builds und in Containern verwendet werden.
Mit diesem Dockerfile:
FROM ubuntu
ARG BUILD_TIME=abc
ENV RUN_TIME=123
RUN touch /env.txt
RUN printenv > /env.txt
Sie können das Build-Argument wie mit docker build -t temp --build-arg BUILD_TIME=def .
Überschreiben. Dann bekommen Sie, was Sie erwarten:
> docker run temp cat /env.txt
HOSTNAME=b18b9cafe0e0
RUN_TIME=123
HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
BUILD_TIME=def
PWD=/