在 Elastic Beanstalk 上设置 Docker 容器主机名
Posted
技术标签:
【中文标题】在 Elastic Beanstalk 上设置 Docker 容器主机名【英文标题】:Setting Docker container hostname on Elastic Beanstalk 【发布时间】:2015-04-26 05:01:59 【问题描述】:我想手动设置部署在 AWS Elastic Beanstalk 上的 Docker 容器的主机名。您可以在使用docker run -h HOSTNAME
启动容器时设置主机名,但我不知道如何(甚至是否)将自定义参数传递给docker run
命令。
Dockerrun.aws.json 文件似乎是一个可能的候选者,但没有记录的密钥可以满足我的需求。
有人知道这是否可行吗?
【问题讨论】:
【参考方案1】:据我所知,这不支持开箱即用。
这里的一个可能的技巧是利用 EB 对环境变量的不良解析。您可以设置环境变量,例如:PARAM1=dummy -h MYHOSTNAME
EB 不引用参数,因此您的 -h
部分将嵌入到 docker run 命令中。
我自己没试过。
另一种选择是创建一个ebextension
文件来修补/opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh
脚本,将-h MYHOST
行注入其中。
【讨论】:
看起来很有趣!我会试一试并报告。 您的问题解决了吗?我有同样的问题,并为此苦苦挣扎了几天。【参考方案2】:不确定单个 docker 容器部署,即 v1,因为我还没有尝试过,但 v2 (即多容器部署)肯定支持它们。您可以通过在Dockerrun.aws.json
中添加容器主机名 -
"hostname": "this-is-my-container-hostname"
【讨论】:
我不认为这是正确的。我在文档中也找不到。 在发布我之前的评论后,我打开了一张支持票,AWS 支持代表看到了同样的 *** 帖子,并确认此页面上的任何方法答案都不起作用。这些脚本已被弃用,取而代之的是其内部 ECS 代理。他们建议我探索 ECS,因为它为此提供了更多控制/选项。 这看起来像是在我的文档中。 Elastic Beanstalk 的多容器配置指出配置文件格式与 ECS 任务定义相同。该文档支持主机名参数。在这里找到:docs.aws.amazon.com/AmazonECS/latest/developerguide/… 还值得一提的是,您必须有“链接”部分,并且网络必须处于桥接模式才能使这些工作。【参考方案3】:您可以通过将容器的主机名定义为环境变量来设置它。
HOSTNAME=your-name
【讨论】:
【参考方案4】:如果您有多个实例,我们会使用下一个脚本修补旧平台,但您可以将其移植到新平台。 .ebextensions/01-docker-hostname.config
示例:
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/04a_set_hostname.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
hostname $(hostname -f | cut -d"." -f1,2)
sed -i "s/docker run -d \\\/docker run -d -h $(hostname) \\\/" /opt/elasticbeanstalk/hooks/appdeploy/enact/04run.sh
如您所见,我们的脚本总是修补运行脚本。 EB 按文件名顺序运行脚本。所以你应该确保你的脚本在运行脚本之前运行。
【讨论】:
以上是关于在 Elastic Beanstalk 上设置 Docker 容器主机名的主要内容,如果未能解决你的问题,请参考以下文章
在 Elastic Beanstalk 上设置 Docker 容器主机名
使用 Postgres 在 Elastic Beanstalk 上设置 Django
如何在 AWS Elastic Beanstalk 上设置 HTTPS
如何在 AWS Elastic Beanstalk 上设置 HTTPS