У меня есть Docker-контейнер, работающий с systemd . Я хочу передать переменные среды приложениям под ним.
Когда я запускаю systemd из Docker (в /sbin/init
виде командной строки), Docker предоставляет переменные для systemd, но не предоставляет дочерним службам . Если я добавлю systemd.setenv=...
в cmdline, переменные будут переданы. Я ищу более чистое решение.
Как открыть переменные среды, переданные /sbin/init
в приложения, запущенные им?
% 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
Я ожидаю увидеть VAR1=1
во время выполнения моей команды.
Другими словами, может ли systemd передавать переменные, передаваемые ему, детям, которые он запускает?
Для Dockerfile смотрите репозиторий github .
источник
Согласно этому описанию, пользовательский экземпляр systemd не наследует переменные среды:
https://wiki.archlinux.org/index.php/Systemd/User#Environment_variables
Здесь предлагается использовать службу onehot systemd, которая настраивает EnvironmentFile для «конечной» службы.
/programming/25396167/how-do-i-get-etcd-values-into-my-systemd-service-on-coreos
источник
PassEnvironment=
. Это помогло мне в среде docker systemd.