Docker主机的Elastic Beanstalk环境variables

我有一个适当部署的Docker Web应用程序(rails)的EB env。 我设置了几个EB envvariables,并且它们在容器中正确可见。 现在我想让这些EB envvariables对EC2实例主机可见,这样我就可以在docker的构build过程中使用它们了。 但是,他们没有暴露在docker的主机,只有容器。
如何将EB envvariables暴露给Docker主机?

我遇到了同样的问题,但需要在执行部署后的Bash脚本期间使用环境variables。

由于jqparsing器在当前的Amazon Linux AMI上是可用的,所以我可以使用它来parsingJSON,然后在主机上导出环境variables(这是ebextensionsconfiguration文件的摘录):

files: "/opt/elasticbeanstalk/hooks/appdeploy/post/export_env_vars_on_host.sh": mode: "000755" owner: root group: root content: | #!/usr/bin/env bash echo Defaults:root \!requiretty >> /etc/sudoers for envvar in `jq '.optionsettings | {"aws:elasticbeanstalk:application:environment"}[] | .[]' /opt/elasticbeanstalk/deploy/configuration/containerconfiguration` do temp="${envvar#\"}"; temp="${temp/=/=\"}"; export temp; done 

这是一个虽然一个,所以我发布我遇到这个问题的解决scheme。
Elastic Beanstalk Docker实例不会将环境variables公开给docker主机。 它只对docker集装箱做。
如果你想获得主机上的envvariables,它们位于/opt/elasticbeanstalk/deploy/configuration/containerconfiguration
这是一个大的JSON文件, 很容易违反环境的JSON结构。
我写了一个小ruby脚本来parsing它,并从中提取envvariables:

 require 'json' container_config = JSON.parse(File.read('/opt/elasticbeanstalk/deploy/configuration/containerconfiguration')) raw_vars = container_config['optionsettings']['aws:elasticbeanstalk:application:environment'] envs = '' raw_vars.each do |raw_var| pair = raw_var.split('=') envs << "export #{pair[0]}=#{pair[1]}\n" if pair[1] end puts envs 

这个脚本产生一组导出命令给控制台,设置env vars。 我适应了一下,写入我的Dockerfile ENV命令。

我没有在Elasticbeanstalk的所有版本上testing过。 但是至less在运行多容器Docker 1.6.2(Generic)的64位Amazon Linux 2015.03 v2.0.1中,有一个更好的方法可以从configuration中获取envars。 已经有一个ruby脚本,它提供了envars的正确的json表示{ "SOME_ENV_VAT" : "VALUE" }

 # returns literal null from jq sudo /opt/elasticbeanstalk/bin/get-config environment | jq -r '.MY_ENVVAR' # returns empty string. Usefull for bash -z sudo /opt/elasticbeanstalk/bin/get-config environment | jq -r '.MY_ENVVAR // empty' 

一行的国王。

 eval $(sudo ruby -e 'require "json"; container_config = JSON.parse(File.read("/opt/elasticbeanstalk/deploy/configuration/containerconfiguration")); raw_vars = container_config["optionsettings"]["aws:elasticbeanstalk:application:environment"]; envs = ""; raw_vars.each do |raw_var| envs << "export #{raw_var};\n" end; print envs;') 

这会自动导出所有的variables。 你不能用puts来输出Ruby的环境variables。