Mam uruchomiony systemd kontener Docker . Chcę przekazać zmienne środowiskowe do aplikacji pod nim.
Kiedy uruchamiam systemd z Dockera ( /sbin/init
jako linia poleceń), Docker udostępnia zmienne systemd, ale nie udostępnia usług potomnych . Jeśli dodam systemd.setenv=...
do cmdline, zmienne są przekazywane. Szukam czystszego rozwiązania.
Jak odsłonić zmienne środowiskowe przekazywane do /sbin/init
uruchomionych przez niego aplikacji?
% 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
Spodziewam się zobaczyć VAR1=1
podczas wykonywania polecenia.
Innymi słowy, czy systemd może przekazywać zmienne przekazywane do dzieci, które uruchamia?
Aby uzyskać plik Dockerfile, zobacz repozytorium github .
źródło
Zgodnie z tym opisem, systemowa instancja użytkownika nie dziedziczy zmiennych środowiskowych:
https://wiki.archlinux.org/index.php/Systemd/User#Environment_variables
Istnieje tutaj sugestia, aby użyć usługi oneshot systemd, która konfiguruje plik EnvironmentFile dla usługi „końcowej”.
/programming/25396167/how-do-i-get-etcd-values-into-my-systemd-service-on-coreos
źródło
PassEnvironment=
. Pomogło mi to w środowisku systemowym dokera.