Saya memiliki wadah Docker yang menjalankan systemd . Saya ingin meneruskan variabel lingkungan ke aplikasi di bawahnya.
Ketika saya memulai systemd dari dalam Docker ( /sbin/init
sebagai baris perintah), Docker mengekspos variabel ke systemd, tetapi tidak mengekspos ke layanan anak . Jika saya menambahkan systemd.setenv=...
ke cmdline, variabel akan diteruskan. Saya mencari solusi yang lebih bersih.
Bagaimana cara mengekspos variabel lingkungan yang diteruskan /sbin/init
ke aplikasi yang dimulai olehnya?
% 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
Saya berharap untuk melihat VAR1=1
saat menjalankan perintah saya.
Dengan kata lain, dapatkah systemd meneruskan variabel yang diteruskan ke anak-anak itu dimulai?
Untuk Dockerfile, lihat repositori github .
sumber
Menurut uraian ini, contoh pengguna systemd tidak mewarisi variabel lingkungan:
https://wiki.archlinux.org/index.php/Systemd/User#Environment_variables
Ada saran di sini untuk menggunakan layanan systemesh oneshot yang mengkonfigurasi EnvironmentFile untuk layanan "final".
/programming/25396167/how-do-i-get-etcd-values-into-my-systemd-service-on-coreos
sumber
PassEnvironment=
. Ini membantu saya di lingkungan systemer docker.