我有一个 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
(测试于
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 中。