Docker run: Umgebungsvariable wird nicht überschrieben

Kesandal

Lt. Junior Grade
Registriert
Aug. 2005
Beiträge
277
Hallo zusammen,

ich arbeite mich in Docker ein und stolpere über ein Problem, dass ich einfach nicht lösen kann.

Umgebung:
Debian 10, Docker 19.03

Was möchte ich machen:
Ich nehme ein bestehendes Images und führe Änderungen durch, abhängig von einer gesetzten Umgebungsvariable.

Das Problem:
Meine Umgebungsvariable wird nicht gesetzt, obwohl ich sie bei docker run übergebe.

Um das Problem zu reduzieren, möchte ich zunächst lediglich den Inhalt der Variable in eine Datei schreiben.

Was habe ich gemacht:
Ich habe einen leeren Ordner erstellt und mein Dockerfile abgelegt.
Code:
mkdir my_docker_img
cd my_docker_img

Dockerfile:
Code:
FROM jenkinsci/jenkins:latest

ARG MYVAR="Dies ist ein Test"
ENV MYVAR ${MYVAR}

RUN echo {$MYVAR} > /myvar_test

Das Image erstelle ich nun mit: sudo docker build -t my_docker_img .
Der Befehl wird mit einem "Successfully build..." quittiert.

Nun starte ich den Container
sudo docker run -d -e "MYVAR=Hallo" -v /home/user/docker/jenkins:/var/jenkins_home --name my_container my_docker_img

und prüfe was in meiner Test-Datei steht:

Code:
user@x1:~/my_docker_img$ sudo docker exec -it -u root my_container /bin/bash
root@c329b13df72f:/# cat /myvar_test
Dies ist ein Test
root@c329b13df72f:/# echo $MYVAR

root@c329b13df72f:/#

Die Variable wird also nicht gesetzt.

Hier (https://stackoverflow.com/questions/48915360/docker-environment-variable-not-overridden) habe ich ein ähnliches Problem gefunden. Jedoch lag der Fehler hier an der falschen Reihenfolge. Das dürfte bei mir nicht zutreffen.

Hat jemand von Euch eine Idee woran das liegen könnte?

Vielen Dank.
 
Könntest du die variable über den export Linux Befehl setzen? Vlt rennst du in einen bug?
 
Ich habe gerade gemerkt, mein Dockerfile war unvollständig. Den Beitrag kann ich nicht mehr editieren.

Dies ist meine aktuelle Version:

Code:
FROM jenkinsci/jenkins:latest

USER root

ARG MYVAR="Dies ist ein Test"
ENV MYVAR ${MYVAR}

RUN echo ${MYVAR} > /myvar_test

ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/jenkins.sh"]

atze303 schrieb:
Könntest du die variable über den export Linux Befehl setzen? Vlt rennst du in einen bug?

Meinst Du so? RUN export MYVAR="${MYVAR}" && echo {$MYVAR} > /myvar_test

Leider klappt dies auch nicht ganz:
Code:
root@aa2941d5cc2:/# cat /myvar_test
Dies ist ein Test
root@aa2941d5cc2:/# echo $MYVAR
Hallo
root@aa2941d5cc2:/#
 
Das Image wird mit der Environment-Variable gebaut und somit ist der Wert Hardcoded. RUN wurde bereits mit "Dies ist ein Test" ausgefuehrt bevor du docker run verwendest.
Du kannst nur den Command in ein Script stecken und dieses als Entrypoint verwenden.

Code:
FROM jenkins/jenkins:latest

USER root

ENV CRONTAB="Dies ist ein Test"

ADD meine_run.sh /

ENTRYPOINT ["/sbin/tini", "--", "/meine_run.sh"] # anstatt der jenkins.sh

meine_run.sh
Bash:
echo $MYVAR > /myvar_test
cat /myvar_test
/usr/local/bin/jenkins.sh # hier wird dann jenkins ausgefuehrt


Habe mal auf jenkins/jenkins gewechselt.
Laut https://hub.docker.com/r/jenkinsci/jenkins ist jenkinsci/jenkins veraltet.
 
Zurück
Oben