Tengo un contenedor Docker que ejecuta systemd . Quiero pasar variables de entorno a las aplicaciones que se encuentran debajo.
Cuando inicio systemd desde Docker ( /sbin/init
como línea de comando), Docker expone las variables a systemd, pero no a los servicios secundarios . Si agrego systemd.setenv=...
al cmdline, se pasan las variables. Estoy buscando una solución más limpia.
¿Cómo expongo las variables de entorno transmitidas /sbin/init
a las aplicaciones iniciadas por este?
% 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
Espero ver VAR1=1
mientras ejecuto mi comando.
En otras palabras, ¿puede systemd pasar variables que se le pasan a los niños que comienza?
Para Dockerfile, vea el repositorio de github .
fuente
Según esta descripción, una instancia de usuario systemd no hereda las variables de entorno:
https://wiki.archlinux.org/index.php/Systemd/User#Environment_variables
Aquí hay una sugerencia para usar el servicio oned systemd que configura un EnvironmentFile para el servicio "final".
/programming/25396167/how-do-i-get-etcd-values-into-my-systemd-service-on-coreos
fuente
PassEnvironment=
. Me ayudó en el entorno docker systemd.