如何识别我的容器是否在AWS ECS上运行?

如果我在AWS ECS(EC2容器服务)中运行基于Docker的容器,有没有办法从应用程序内部识别我的容器是否在AWS ECS上运行? 这是必需的,因为我的docker容器可以在任何平台上运行,但是当它在AWS ECS上运行时,我需要执行一些额外的操作。

也许你可以使用Amazon ECS容器代理自省 :

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所提及的另一个标准是实例元数据和用户数据

实例元数据是关于您的实例的数据,可用于configuration或pipe理正在运行的实例。 实例元数据分为几类。

要从正在运行的实例中查看实例元数据的所有类别,请使用以下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。
请参阅“ 用curl查看web服务的Linux脚本已启动 ”

经过大量的试验和错误,我发现以下最有用的:
调用http://169.254.169.254/latest/meta-data/
如果您获得200 OK,那么您可以假设您正在AWS EC2 / ECS内部运行。
但是,如果您没有获得200 OK,那么您没有在AWS EC2 / ECS中运行。