【问题标题】:Passing environment variables to Docker containers将环境变量传递给 Docker 容器
【发布时间】:2015-09-18 21:40:21
【问题描述】:

目前使用 Elastic Beanstalk 运行 Docker 容器,我需要将重要信息作为环境变量传递给我的容器。

我当前的 Dockerrun.aws.json 看起来像这样:

{
    "AWSEBDockerrunVersion": "1",
    "Image": {
        "Name": "b2boost/rabbitelasticdockstash",
        "Update": "true"
    },
    "Ports": [
        {
            "ContainerPort": "80"
        }
    ],
    "environment": [
        {
            "name": "RABBITMQ_HOST",
            "value": "RABBITMQ_HOST"
        },
        {
            "name": "RABBITMQ_PASSWORD",
            "value": "RABBITMQ_PASSWORD"
        },
        {
            "name": "RABBITMQ_USER",
            "value": "RABBITMQ_USER"
        },
        {
            "name": "RABBITMQ_VHOST",
            "value": "RABBITMQ_VHOST"
        },
        {
            "name": "ELASTICSEARCH_HOST",
            "value": "ELASTICSEARCH_HOST"
        },
        {
            "name": "ELASTICSEARCH_PASSWORD",
            "value": "ELASTICSEARCH_PASSWORD"
        },
        {
            "name": "ELASTICSEARCH_PORT",
            "value": "ELASTICSEARCH_PORT"
        },
        {
            "name": "ELASTICSEARCH_PROTOCOL",
            "value": "ELASTICSEARCH_PROTOCOL"
        },
        {
            "name": "ELASTICSEARCH_USER",
            "value": "ELASTICSEARCH_USER"
        }
    ],
    "Volumes": [
    ],
    "Logging": "/var/log/eb-activity.log"
}

但这不起作用。当通过 SSH 连接到我的 beanstalk 实例然后获取环境变量的内容时,我可以看到它们没有被初始化:

[ec2-user@myip ~]$ sudo docker exec goofy_curie env

PATH=/opt/logstash/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:bin
HOSTNAME=HOSTNAME
LANG=C.UTF-8
JAVA_VERSION=7u79
JAVA_DEBIAN_VERSION=7u79-2.5.5-1~deb8u1
LOGSTASH_MAJOR=1.5
LOGSTASH_VERSION=1:1.5.1-1
HOME=/root

如何在容器中设置环境变量? Dockerrun.aws.json 似乎不适合我。

【问题讨论】:

标签: amazon-web-services docker amazon-elastic-beanstalk


【解决方案1】:

单个容器的 Dockerrun.aws.json 中不允许使用“环境”字段。

但是,您可以使用以下过程在 .config 文件中指定环境变量(查看documentation 了解更多信息):

  1. 创建文件夹 .ebextensions
  2. 在文件夹中创建一个 .config 文件
  3. 填写配置文件:
选项设置: - 选项名称:RABBITMQ_HOST 值:RABBITMQ_HOST - 选项名称:RABBITMQ_PASSWORD 值:RABBITMQ_PASSWORD - 选项名称:RABBITMQ_USER 值:RABBITMQ_USER - 选项名称:RABBITMQ_VHOST 值:RABBITMQ_VHOST - 选项名称:ELASTICSEARCH_HOST 值:ELASTICSEARCH_HOST - 选项名称:ELASTICSEARCH_PASSWORD 值:ELASTICSEARCH_PASSWORD - 选项名称:ELASTICSEARCH_PORT 值:ELASTICSEARCH_PORT - 选项名称:ELASTICSEARCH_PROTOCOL 值:ELASTICSEARCH_PROTOCOL - 选项名称:ELASTICSEARCH_USER 值:ELASTICSEARCH_USER
  1. 将 .ebextensions 文件与 Dockerrun.aws.json 一起压缩并将其上传到 Beanstalk

【讨论】:

  • 如果您不进行捆绑,而是在 docker hub 上指定图像怎么办? .ebextensions 会去哪里?
  • @Luke 您仍然必须在 Dockerrun.aws.json 文件中指定 Docker Hub 映像,对吧?因此,使用您的 Dockerrun.aws.json 和 .ebextensions 创建一个 git 存储库,然后使用 EB CLI 轻松部署配置。
  • 是否有可能使用在弹性beantalk环境中创建的directy环境变量?
【解决方案2】:

另一种方式(图形):

在您的 beanstalk 配置中,点击 Software 卡的 modify。在此页面的底部,您可以填写环境变量的名称和值。

【讨论】:

  • 我试过了,但容器仍然无法访问直接在 EBS 上定义的环境变量。
猜你喜欢
  • 2022-01-16
  • 2021-06-07
  • 2020-02-23
  • 2015-08-10
  • 2016-12-08
  • 2021-06-25
  • 2017-09-18
  • 2019-04-10
相关资源
最近更新 更多