如何确定我的容器是否在 AWS ECS 上运行?

Raj*_*was 7 containers amazon-web-services amazon-ecs docker

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

Von*_*onC 6

也许您可以使用Amazon ECS Container Agent Introspection

Amazon ECS 容器代理提供了一个 API,用于收集有关运行代理的容器实例以及在该实例上运行的关联任务的详细信息。

您可以curl在容器实例中使用该命令查询 Amazon ECS 容器代理(端口 51678)并返回容器实例元数据或任务信息。

例如,从您的容器中:

[ec2-user ~]$ curl http://localhost:51678/v1/metadata
Run Code Online (Sandbox Code Playgroud)

输出:

{
  "Cluster": "default",
  "ContainerInstanceArn": "<container_instance_ARN>",
  "Version": "Amazon ECS Agent - v1.14.1 (467c3d7)"
}
Run Code Online (Sandbox Code Playgroud)

OP在评论中提到的另一个标准是实例元数据和用户数据

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

要从正在运行的实例中查看所有类别的实例元数据,请使用以下 URI:

http://169.254.169.254/latest/meta-data/
Run Code Online (Sandbox Code Playgroud)

请注意,您无需为用于检索实例元数据和用户数据的 HTTP 请求付费。

您可以使用诸如 cURL 之类的工具,或者如果您的实例支持它,则使用 GET 命令;例如:

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/
Run Code Online (Sandbox Code Playgroud)

所以一个成功curl就足够了:

 curl -sL -w "%{http_code}\\n" "http://169.254.169.254/latest/meta-data/" -o /dev/null
Run Code Online (Sandbox Code Playgroud)

如果正常,将显示 200。
请参阅“使用 curl 检查 Web 服务是否启动的 Linux 脚本