从容器内部获取内省元数据

时间:2017-07-26 18:07:07

标签: docker amazon-ecs

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

文档建议致电:

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

适用于 EC2实例本身,但不适用于不在同一网络上的容器(网桥网络模式下)。

然而,访问EC2 introspection metadata的命令运行良好,因为必须对IP地址进行调用,该地址可以从容器中访问:

curl http://169.254.169.254/latest/meta-data/  

我想一种方法是改变网络模式以共享主机接口,但在当前的设置中,这是我宁愿避免的。

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

1 个答案:

答案 0 :(得分:1)

好的,我找到了办法。

ECS群集 EC2实例上运行的容器可以通过其私有IP(不可靠)或从<来访问主机IP strong> Docker Bridge IP ,可以在它们上运行内省调用。

Docker Bridge IP 选项,定义容器将在哪个网络上运行,默认为 172.17.0.0/16 ,并且可以在文件{{ 1}}(在官方的 ECS社区AMIs 上),在/etc/sysconfig/docker的定义中:

OPTIONS

因此,即使主机的 docker0 网络接口可能具有 172.17.0.1 的IP地址,也可以更好地检索它从容器中提取 docker0 网络接口的网关的IP地址,这样:

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

因此,在我的容器中,运行这些命令将返回我期望的内容:

ip route|head -n 1|sed -r 's/default via ([0-9.]+).*$/\1/'