gpt4 book ai didi

docker - 从容器内部获取自省(introspection)元数据

转载 作者:行者123 更新时间:2023-12-02 18:30:49 25 4
gpt4 key购买 nike

我想知道如何访问introspection metadata从在 中运行的容器内部ECS集群 .

该文档建议调用:

curl http://localhost:51678/v1/metadata

哪个适用于 EC2 实例 本身,但不是来自容器,容器不在同一个网络上(在桥接网络模式下)。

但是,访问 EC2 introspection metadata 的命令效果很好,因为必须对 IP 地址进行调用,该 IP 地址可从容器访问:
curl http://169.254.169.254/latest/meta-data/  

我想一种方法是更改​​网络模式以共享主机接口(interface),但在当前设置中,我希望避免这样做。

在上下文中,我正在尝试将用于将自定义 Cloudwatch 指标从本地脚本发送到实用程序容器的代码移动。我想避免指定诸如 ECS 集群名称之类的东西,因为它可以从 API 调用中检索到。

最佳答案

好的,我找到了方法。

上运行的容器EC2 实例 来自 ECS集群可以从其私有(private) IP(不可靠)或从 访问主机 IP docker 桥 IP ,并且可以在它们上运行自省(introspection)调用。

docker 桥 IP 选项,定义容器将在哪个网络上运行,默认为172.17.0.0/16,可以在文件/etc/sysconfig/docker中修改(在官方 ECS 社区 AMI 上),在 OPTIONS 的定义中:

OPTIONS="--ip-forward=true --iptables=true --bip="172.32.0.1/24" --storage-opt dm.basesize=100G"

所以即使主机的 docker 0 网络接口(interface)的 IP 地址可能是 172.17.0.1,最好通过提取 的网关 IP 地址从容器中检索它 docker 0 网络接口(interface),这样:
ip route|head -n 1|sed -r 's/default via ([0-9.]+).*$/\1/'
所以在我的容器中,运行这些命令将返回我所期望的:
HOST_IP=$(ip route|head -n 1|sed -r 's/default via ([0-9.]+).*$/\1/')
clusterName=$(curl -s "http://$HOST_IP:51678/v1/metadata" | jq -r ".Cluster")
instanceArn=$(curl -s "http://$HOST_IP:51678/v1/metadata" | jq -r ".ContainerInstanceArn")

关于docker - 从容器内部获取自省(introspection)元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45334461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com