Docker主机的Elastic Beanstalk环境变量

Tal*_*Tal 11 docker amazon-elastic-beanstalk dockerfile

我有一个正确部署Docker web app(rails)的EB env.我设置了几个EB env变量,它们在容器中可以正常显示.现在 - 我希望这些EB env变量对EC2实例主机可见,以便我可以在docker构建过程中使用它们.但是,它们不会暴露给docker主机,只会暴露给容器.
如何将EB env变量公开给Docker主机?

Kri*_*her 9

我遇到了同样的问题,但需要在执行部署后Bash脚本期间提供环境变量.

由于jq解析器在(当前)Amazon Linux AMI上可用,我能够使用它来解析JSON,然后在主机上导出环境变量(这是ebextensions配置文件的摘录):

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
Run Code Online (Sandbox Code Playgroud)


Tal*_*Tal 6

这只是一个,所以我为那些遇到这个的人发布我的解决方案.
Elastic Beanstalk Docker实例不会将环境变量公开给docker主机.它只对docker容器执行此操作.
如果您想在主机上获取env变量,它们位于/opt/elasticbeanstalk/deploy/configuration/containerconfiguration.
这是一个大型JSON文件,方便地违反了env变量的JSON结构.
我写了一个小的ruby脚本来解析它并从中提取env变量:

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
Run Code Online (Sandbox Code Playgroud)

此脚本为控制台生成一组导出命令,用于设置env变量.我调整了一下来将ENV命令写入我的Dockerfile.


小智 5

我没有在所有版本的Elasticbeanstalk上测试过这个.但至少64位运行多容器Docker 1.6.2(通用)的Amazon Linux 2015.03 v2.0.1中,有一种更好的方法可以从配置中获取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'
Run Code Online (Sandbox Code Playgroud)