如果我在AWS ECS(EC2容器服务)中运行基于docker的容器,我是否可以从应用程序内部识别我的容器是否在AWS ECS上运行?这是必需的,因为我的docker容器可以在任何平台上运行,但是当它在AWS ECS上运行时,我需要执行一些额外的操作。
答案 0 :(得分:4)
也许您可以使用Amazon ECS Container Agent Introspection:
Amazon ECS容器代理提供了一个API,用于收集有关运行代理的容器实例以及在该实例上运行的关联任务的详细信息。
您可以使用容器实例中的
curl
命令查询Amazon ECS容器代理(端口51678)并返回容器实例元数据或任务信息。
例如,从您的容器中:
[ec2-user ~]$ curl http://localhost:51678/v1/metadata
输出:
{
"Cluster": "default",
"ContainerInstanceArn": "<container_instance_ARN>",
"Version": "Amazon ECS Agent - v1.14.1 (467c3d7)"
}
OP in the comments提到的另一个标准是Instance MetaData and User Data
实例元数据是您可以用来配置或管理正在运行的实例的实例数据。实例元数据分为几类。
要在正在运行的实例中查看所有类别的实例元数据,请使用以下URI:
http://169.254.169.254/latest/meta-data/
请注意,您不需要为用于检索实例元数据和用户数据的HTTP请求付费。
您可以使用cURL等工具,或者如果您的实例支持它,则可以使用GET命令;例如:
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/
成功的curl
就足够了:
curl -sL -w "%{http_code}\\n" "http://169.254.169.254/latest/meta-data/" -o /dev/null
如果确定,则显示200 请参阅&#34; Linux script with curl to check webservice is up&#34;
答案 1 :(得分:2)
经过大量的反复试验,我发现以下内容最有帮助:
调用http://169.254.169.254/latest/meta-data/
如果你得到200 OK,那么你可以假设你在AWS EC2 / ECS中运行。
但如果你没有200 OK,那么你就没有在AWS EC2 / ECS中运行。
答案 2 :(得分:0)
我已经尝试了在此响应之前发布的其他替代方案,但是所有替代方案均不适用于ECS。我不知道它是否已更改,但是现在,如果您要验证容器是否在ECS上运行,应致电:http://169.254.170.2/v2/metadata/
更多信息:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-metadata-endpoint-v2.html
如果要验证容器是否在EC2上运行,则应调用:http://169.254.169.254/latest/meta-data/
更多信息:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html