Eu tenho um contêiner do Docker executando o systemd . Eu quero passar variáveis de ambiente para aplicativos nele.
Quando inicio o systemd no Docker ( /sbin/init
como linha de comando), o Docker expõe variáveis ao systemd, mas não expõe a serviços filho . Se eu adicionar systemd.setenv=...
ao cmdline, as variáveis serão passadas. Estou procurando uma solução mais limpa.
Como exponho variáveis de ambiente passadas /sbin/init
para aplicativos iniciados por ele?
% 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
enquanto estiver executando meu comando.
Em outras palavras, o systemd pode passar variáveis passadas a ele para filhos que ele inicia?
Para o Dockerfile, consulte o repositório do github .
fonte
De acordo com esta descrição, uma instância do usuário systemd não herda variáveis de ambiente:
https://wiki.archlinux.org/index.php/Systemd/User#Environment_variables
Há uma sugestão aqui para usar o serviço oneshot systemd que configura um EnvironmentFile para o serviço "final".
/programming/25396167/how-do-i-get-etcd-values-into-my-systemd-service-on-coreos
fonte
PassEnvironment=
. Isso me ajudou no ambiente do docker systemd.