2017-03-15 6 views
0

ドッカー・コンテナに環境変数を渡す方法は分かっています。Ubuntuのランレベル・スクリプトでドッキング・コンテナに渡された環境変数をピッキングする

sudo docker run -e ENV1='ENV1_VALUE' -e ENV2='ENV2_VALUE1' .... 

ように私は私がドッキングウィンドウコンテナ内でシェルからスクリプトを実行した場合、正常にこれらの変数を選択することができています。しかし、ドッカーインスタンスのランレベルスクリプトは、環境変数がドッカーコンテナに渡されるのを見ることができません。最終的には、すべてのサービス/デーモンが、私が欲しくないデフォルトの設定から始まっています。

解決策を提案してください。

答えて

0
You can manage your run level services to pick environment variables passed to 
Docker instance. 

For example here is my docker file(Dockerfile): 

.... 
.... 
# Adding my_service into docker file system and enabling it. 
ADD my_service /etc/init.d/my_service 
RUN update-rc.d my_service defaults 
RUN update-rc.d my_service enable 
# Adding entrypoint script 
COPY ./entrypoint.sh /entrypoint.sh 
ENTRYPOINT ["/entrypoint.sh"] 

# Set environment variables. 
ENV HOME /root 
# Define default command. 
CMD ["bash"] 


.... 


Entrypoint file can save the environment variables to a file,from which 
you service(started from Entrypoint script) can source the variables. 

entrypoint.sh contains: 
#!/bin/bash -x 
set -e 
printenv | sed 's/^\(.*\)$/export \1/g' > /root/project_env.sh 
service my_service start 
exec /bin/bash 

Inside my_service, I am sourcing the variables from /root/project_env.sh like: 
#!/bin/bash 
set -e 
. /root/project_env.sh 



I hope it solve your problem. This way you need NOT to depend on external file system, provide your are passing variables to your docker instance at the time of running it. 
0

Dockerファイルには、実行時に環境変数を指定するオプションがあります。詳細は

Dockerfile

FROM ubuntu:16.04 
ENV foo=bar 
ENV eggs=spam 
RUN <some runtime command> 
CMD <entrypoint> 

ルックat the docker environment replacement docs

0

ランレベルのスクリプトは環境変数を読み取ることができません。これは良いことだと思います。

環境変数をホスト上のファイルに入れて、ドッカーコンテナ内のファイルにマウントすることができます(例:/etc/init.d/)。ドッカーイメージのinitスクリプトを変更して、スクリプトを実行する前にマウントされたファイルを入手してください。

関連する問題