我们正在从 ECS 迁移到 Fargate。在 ECS 中,我们可以像这样在任务定义中设置主机名:
"hostname": "%HOST_NAME%"
它无法创建,并出现错误“当 networkMode=awsvpc 时容器不支持主机名”有没有办法设置主机名?
我们正在从 ECS 迁移到 Fargate。在 ECS 中,我们可以像这样在任务定义中设置主机名:
"hostname": "%HOST_NAME%"
它无法创建,并出现错误“当 networkMode=awsvpc 时容器不支持主机名”有没有办法设置主机名?
尽管文档很清楚这不受支持,但有一种解决方法。您可以创建一个 bootstrap_ecs.sh 文件并覆盖容器 ENTRYPOINT 以在运行时引用它(或者将以下内容添加到您自己的引导脚本中)。您可以在从 ECS 运行时使用它。否则,请使用您的标准 ENTRYPOINT 和 COMMAND。
bootstrap_ecs.sh
#!/bin/bash
ifconfig # prints full IP info
echo "Detecting 'eth1' interface..."
DETECTED_IP=$(ifconfig -a | grep -A2 eth1 | grep inet | awk '{print $2}' | sed 's#/.*##g' | grep "\.")
if [[ -z $DETECTED_IP ]]; then
echo "Detecting 'eth0' interface ('eth1' not found)..."
DETECTED_IP=$(ifconfig -a | grep -A2 eth0 | grep inet | awk '{print $2}' | sed 's#/.*##g' | grep "\." | head -1)
fi
DETECTED_HOSTNAME=$(hostname)
echo -e "\n\nDETECTED_IP=$DETECTED_IP\nDETECTED_HOSTNAME=$DETECTED_HOSTNAME\n\n"
# Note: newer OS versions us `ip` instead of `ifconfig`
# Echo for debugging. You can comment/delete the 1st and 3rd lines once everything is working.
echo -e "Current file contents:\n $(cat /etc/hosts)"
echo "$DETECTED_IP $DETECTED_HOSTNAME" >> /etc/hosts
echo -e "\n\n\nUpdated file contents:\n $(cat /etc/hosts)"
CMD="$@"
$CMD
AWS 文档说The hostname parameter is not supported if using the awsvpc networkMode.
FARGATE 不支持除 awsvpc 之外的任何内容,因此无法在任务定义中使用 FARGATE 启动类型设置主机名。
让我分享一个我申请设置Avro Schema Registry的技巧。这可能有助于回答这个问题。Schema Registry 需要设置SCHEMA_REGISTRY_HOST_NAME
环境变量。使用 AWS Fargate 和awsvpc
网络模式,无法在任务定义中显式设置主机名属性,正如该线程中已经指出的那样。对于水平扩展,您需要多个注册表实例,每个实例都有自己的SCHEMA_REGISTRY_HOST_NAME
值。Command
我以以下方式覆盖了任务定义中的属性(HOSTNAME
由 Docker 提供,并且在awsvpc
制度下它可靠地反映了主机名):
sh,-c,export SCHEMA_REGISTRY_HOST_NAME=$HOSTNAME;/etc/confluent/docker/run
这种方法的缺点是您现在依赖于图像的实现细节;在这种情况下,CMD
来自 Dockerfile 的原始语句。这就是为什么使用带有图像名称的特定版本标签而不是依赖标签总是很重要的原因latest
。
PS 作为参考,这是我对 Schema Registry问题 1126 的原始评论。
我最近遇到了同样的问题,但是我们采用了与为每个任务设置主机名不同的路径。
在 ECS 和 Fargate 上的 sidecar 容器中运行时,datadog-agent 存在一个突出的 GitHub 问题:https ://github.com/DataDog/datadog-agent/issues/3159
这导致发现DD_DOGSTATSD_TAG_CARDINALITY=orchestrator
在 ECS 和 Fargate 上运行时自动添加 task_arn 标签的设置。https://docs.datadoghq.com/getting_started/tagging/assigning_tags/?tab=containerizedenvironments#environment-variables