【问题标题】:How to identify whether my container is running on AWS ECS or not?如何识别我的容器是否在 AWS ECS 上运行?
【发布时间】:2017-10-26 20:34:04
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services docker containers amazon-ecs


    【解决方案1】:

    也许你可以使用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。
    见“Linux script with curl to check webservice is up

    【讨论】:

    • 如果我在普通的 EC2 实例上运行会怎样?
    • Amazon ECS 代理应该仍然可以访问。
    • 在正常的 EC2 实例中,curl localhost:51678/v1/metadata - 不起作用。所以我找到了另一种识别相同的方法,即使用: curl 169.254.169.254/latest/meta-data - 如果你得到 200 OK,那么你在 EC2/ECS 上运行。
    【解决方案2】:

    经过多次反复试验,我发现以下最有帮助:
    调用http://169.254.169.254/latest/meta-data/
    如果您获得 200 OK,那么您可以假设您在 AWS EC2/ECS 中运行。
    但是如果你没有得到 200 OK,那么你就没有在 AWS EC2/ECS 中运行。

    【讨论】:

    • 这并不完全正确。对于 EC2,它是正确的,对于 ECS,它不再有效。你应该:169.254.170.2/v2/metadata
    【解决方案3】:

    我已经尝试过在此回复之前发布的其他替代方案,但它们都不适用于 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

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 2016-07-09
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2018-12-13
      相关资源
      最近更新 更多