我想手动设置部署在AWS Elastic Beanstalk上的Docker容器的主机名。您可以在使用docker run -h HOSTNAME
启动容器时设置主机名,但我无法弄清楚如何(或者甚至)将自定义参数传递给docker run
命令。
Dockerrun.aws.json文件似乎可能是候选者,但没有记录的密钥可以满足我的需求。
有人知道这是否可行?
答案 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"