Ich habe einen Docker-Container, auf dem systemd ausgeführt wird . Ich möchte Umgebungsvariablen an Anwendungen darunter übergeben.
Wenn ich systemd in Docker ( /sbin/init
als Befehlszeile) starte, macht Docker Variablen für systemd verfügbar , jedoch nicht für untergeordnete Dienste . Wenn ich systemd.setenv=...
zur cmdline hinzufüge , werden die Variablen übergeben. Ich suche eine sauberere Lösung.
Wie mache ich Umgebungsvariablen verfügbar, die an /sbin/init
von ihr gestartete Anwendungen übergeben werden?
% docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged -ti \
-e VAR1=1 motiejus/systemd_fedora20 \
init systemd.setenv=VAR2=2
...
Welcome to Fedora 20 (Heisenbug)!
...
[ OK ] Reached target Multi-User System.
[root@740690365eb0 ~]# env | grep VAR
VAR2=2
Ich erwarte zu sehen, VAR1=1
während mein Befehl ausgeführt wird.
Mit anderen Worten, kann systemd Variablen an Kinder übergeben, die es startet?
Informationen zu Dockerfile finden Sie im Github-Repository .
quelle
Gemäß dieser Beschreibung erbt eine systemd-Benutzerinstanz keine Umgebungsvariablen:
https://wiki.archlinux.org/index.php/Systemd/User#Environment_variables
Hier wird vorgeschlagen, den Dienst oneshot systemd zu verwenden, der eine Umgebungsdatei für den "endgültigen" Dienst konfiguriert.
/programming/25396167/how-do-i-get-etcd-values-into-my-systemd-service-on-coreos
quelle
PassEnvironment=
. Es hat mir in der Docker-Systemumgebung geholfen.