J'ai un conteneur Docker exécutant systemd . Je souhaite transmettre des variables d'environnement aux applications situées en dessous.
Lorsque je démarre systemd à partir de Docker ( /sbin/init
en ligne de commande), Docker expose des variables à systemd, mais n'expose pas aux services enfants . Si j'ajoute systemd.setenv=...
à la cmdline, les variables sont passées. Je recherche une solution plus propre.
Comment exposer les variables d'environnement transmises /sbin/init
aux applications démarrées par celui-ci?
% 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
Je m'attends à voir VAR1=1
tout en exécutant ma commande.
En d'autres termes, systemd peut-il transmettre des variables qui lui sont transmises aux enfants qu'il démarre?
Pour Dockerfile, voir le référentiel github .
la source
Selon cette description, une instance d'utilisateur systemd n'hérite pas de variables d'environnement:
https://wiki.archlinux.org/index.php/Systemd/User#Environment_variables
Il est suggéré ici d'utiliser le service oneshot systemd qui configure un EnvironmentFile pour le service "final".
/programming/25396167/how-do-i-get-etcd-values-into-my-systemd-service-on-coreos
la source
PassEnvironment=
. Cela m'a aidé dans l'environnement docker systemd.