从容器内部获取内省元数据
我想知道如何访问在ECS集群中运行的容器内的内省元数据 。
文档build议调用:
curl http://localhost:51678/v1/metadata
它在EC2实例本身上工作,但不在不在同一networking中的容器上( 桥接networking模式下)。
但是,访问EC2内省元数据的命令行之有效,因为必须对该IP地址进行呼叫,该IP地址可从容器中访问:
curl http://169.254.169.254/latest/meta-data/
我想一个办法是改变networking模式共享主机接口,但在目前的设置,我宁愿避免。
在上下文中,我尝试将自定义Cloudwatch指标从本地脚本发送到实用程序容器的代码。 我想避免指定像ECS集群名称这样的东西,当它可以从API调用中检索。
好吧,我find了一个方法。
从ECS集群运行在EC2实例上的容器可以从其私有IP(不可靠)或从Docker Bridge IP访问主机IP,并且可以在其上运行内省调用。
Docker Bridge IP选项定义容器将在哪个networking上运行,缺省值为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"
因此,即使主机的docker0networking接口可能具有IP地址172.17.0.1 ,也最好通过提取docker0networking接口的网关的IP地址从容器中检索它,方法如下:
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")
- 增加AWS ECS任务定义保留端口限制
- 在CircleCI中使用ECS存储库图像作为构build图像
- 有没有办法让Docker Splunk驱动程序在AWS EC2容器服务(ECS)上运行时将EC2实例Id发送到Splunk?
- Elastic Beanstalk MultiContainer Docker环境variables
- Kubernetes是否均匀分布在ec2集群中?
- 用ecs-cli在AWS上部署Docker时遇到困难
- 无法从AWS ECS Docker Container访问AWS RDS
- configurationECS以使用预留实例
- 我可以configurationECS自动清除我的EC2实例中的旧容器吗?