如何将系统定义的 Elastic Beanstalk 环境变量 (HOSTNAME) 传递到 EC2 Docker 容器?

问题描述 投票:0回答:1

我有一个 Elastic Beanstalk 应用程序,用于管理一些 EC2 实例。

我想将环境变量

HOSTNAME
从EC2实例传递到在其上运行的Docker容器。我可以远程访问实例并
echo $HOSTNAME
,但我不确定如何将值传递给我的应用程序的 Docker 容器。

AWS 文档描述了使用 Docker Compose 时如何传递 UI 中定义的环境变量,但没有描述它如何在非 Compose 设置中工作。

如何将

HOSTNAME
传递给在EC上运行的容器

平台:

Docker running on 64bit Amazon Linux 2/3.6.5

amazon-web-services amazon-ec2 environment-variables amazon-elastic-beanstalk
1个回答
0
投票

(测试于

Docker running on 64bit Amazon Linux 2/3.6.5

查看 EC2 实例的日志,查看

eb-engine.log
,您应该会找到如下行:

2023/12/17 14:05:13.328497 [INFO] Running command /bin/sh -c docker run -d --env-file /opt/elasticbeanstalk/deployment/env.list   3a15af993d32

看起来 Elastic Beanstalk 会将环境变量存储在位于

/opt/elasticbeanstalk/deployment/env.list
的文件中。我们只需要在容器启动之前修改这个文件即可。


您将需要使用两个平台挂钩。它将在任何应用程序部署上运行。另一个将在任何配置部署上运行。

  • 在您的代码库中,创建目录

    .platform/hooks/predeploy
    .platform/confighooks/predeploy

  • 在每个目录中添加bash脚本文件。我打电话给我的

    01-env-var-passthrough.sh
    。将此代码粘贴到其中:

    #!/usr/bin/env bash
    set -o errexit -o nounset -o pipefail -o verbose
    
    # Append a new line to the EC2 instance's environment variables
    envfile="/opt/elasticbeanstalk/deployment/env.list"
    
    echo "" >> $envfile
    echo "HOSTNAME=$HOSTNAME" >> $envfile
    
  • 确保

    .platform/
    目录包含在捆绑的应用程序 zip 中。

© www.soinside.com 2019 - 2024. All rights reserved.