在Elastic Beanstalk上设置Docker容器主机名

时间:2015-02-24 14:13:15

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

我想手动设置部署在AWS Elastic Beanstalk上的Docker容器的主机名。您可以在使用docker run -h HOSTNAME启动容器时设置主机名,但我无法弄清楚如何(或者甚至)将自定义参数传递给docker run命令。

Dockerrun.aws.json文件似乎可能是候选者,但没有记录的密钥可以满足我的需求。

有人知道这是否可行?

4 个答案:

答案 0 :(得分:2)

据我所知,开箱即用不支持。

这里可能存在的黑客攻击是利用EB糟糕的环境变量解析。您可以设置环境变量,例如:
PARAM1=dummy -h MYHOSTNAME
EB没有引用参数,因此您的-h部分将嵌入到docker run命令中。 我自己没试过。

另一种选择是创建一个ebextension文件来修补/opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh脚本,并将-h MYHOST行注入其中。

答案 1 :(得分:0)

您可以通过将容器的主机名定义为环境变量来设置容器的主机名。

HOSTNAME=your-name

答案 2 :(得分:0)

如果您有多个实例,我们使用下一个脚本修补旧平台,但您可以将其移植到新平台。 .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按文件名顺序运行脚本。所以你应该确保你的脚本在运行脚本之前运行。

答案 3 :(得分:0)

不确定单个Docker容器即v1,因为我还没有尝试过,但是v2肯定支持它们,即多容器部署。您可以通过在Dockerrun.aws.json-

下面添加一个容器主机名
  "hostname": "this-is-my-container-hostname"