在 Docker 中访问 Elastic Beanstalk 环境属性
Posted
技术标签:
【中文标题】在 Docker 中访问 Elastic Beanstalk 环境属性【英文标题】:Accessing Elastic Beanstalk environment properties in Docker 【发布时间】:2014-09-28 18:17:05 【问题描述】:所以我一直在寻找如何从 AWS EB Web 界面为我的 Docker 容器指定环境变量的示例。通常在 EB 中,您可以添加在运行时可用的环境属性。在我切换到 Docker 之前,我在以前的部署中使用了这些,但似乎 Docker 关于如何处理环境属性有一些不同的规则,对吗?根据这篇文章 [1],只有 AWS 凭证和 PARAM1-PARAM5 会出现在环境变量中,但不会出现自定义属性。这就是我听起来的样子,特别是考虑到支持自定义环境属性的容器明确表示,就像这里显示的 Python [2]。有没有人有这个软件组合的经验?我只需要指定一个环境变量,它告诉我应用程序是处于“暂存”模式还是“生产”模式,然后我的所有环境特定配置都由应用程序本身设置。
[1]http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html#command-options-docker
[2]http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html#command-options-python
【问题讨论】:
【参考方案1】:AWS Elastic Beanstalk Docker 容器支持自定义环境变量。看起来像文档中的遗漏。您可以为您的环境定义自定义环境变量,并期望将它们传递给 docker 容器。
【讨论】:
容器启动时这些是否可用?例如,如果我重新启动我的环境(而不是重新部署)? 是的,它们可用【参考方案2】:我需要使用 Elastic Beanstalk 在 docker run 时传递环境变量,但是不允许将此信息放在 Dockerrun.aws.json 中。
解决此场景的步骤如下:
-
创建文件夹 .ebextensions
在文件夹中创建一个.config文件
填写.config文件:
option_settings:
-option_name: VARIABLE_NAME
value: VARIABLE_VALUE
-
压缩文件夹 .ebextensions 文件以及 Dockerrun.aws.json 和 Dockerfile 并将其上传到 Beanstalk
要查看结果,在 EC2 实例中,执行命令“docker inspect CONTAINER_ID”,将看到环境变量。
【讨论】:
【参考方案3】:我不认为像Rohit Banga's answer 建议的那样错过这些文档。认为我同意“您可以为您的环境定义自定义环境变量,并期望它们将传递给 docker 容器”。
Docker container portion of the docs 说,“Elastic Beanstalk 没有提供 DOCKER-SPECIFIC 配置选项”...这并不一定意味着没有环境变量传递给 Docker 容器。
例如,始终传递的for the Ruby container the Ruby-specific variables 是... RAILS_SKIP_MIGRATIONS、RAILS_SKIP_ASSET_COMPILATION、BUNDLE_WITHOUT、RACK_ENV、RAILS_ENV。等等。对于 Ruby 容器,假设您正在运行一个 Ruby 应用程序,因此设置一些合理的默认值以确保它们始终可用。
另一方面,对于 Docker 容器,它似乎是开放的。你可以指定任何你想要的变量......它们不会假设你正在运行什么,Rails(Ruby),Django(Python)等......因为它可以是任何东西。他们事先不知道您要运行什么,因此很难设置合理的默认值。
【讨论】:
以上是关于在 Docker 中访问 Elastic Beanstalk 环境属性的主要内容,如果未能解决你的问题,请参考以下文章
无法访问 jarfile - Elastic Beanstalk 上的 Docker
在 Docker 中为 AWS Elastic Beanstalk 构建期间访问 .env 变量
AWS Elastic Beanstalk 上的 Docker - 无法从容器访问环境变量
访问 Elastic Beanstalk/Docker Nginx/PHP-FPM 实例中的客户端 IP