Docker 如何从ECS容器中获取任务ID?

Docker 如何从ECS容器中获取任务ID?,docker,containers,aws-sdk,aws-ecs,Docker,Containers,Aws Sdk,Aws Ecs,您好,我对从位于EC2主机内的运行容器中检索任务ID感兴趣 声明存在一个环境变量ECS\u CONTAINER\u METADATA\u FILE,其中包含此数据的位置,但只有在创建集群/EC2实例时将ECS\u ENABLE\u CONTAINER\u METADATA变量设置为true时,才会设置/可用。我看不出在aws控制台中哪里可以做到这一点 此外,文档声明,可以通过在主机内将其设置为true来完成此操作,但需要重新启动docker代理 有没有其他方法可以做到这一点,而无需进入EC2内部

您好,我对从位于EC2主机内的运行容器中检索任务ID感兴趣

声明存在一个环境变量
ECS\u CONTAINER\u METADATA\u FILE
,其中包含此数据的位置,但只有在创建集群/EC2实例时将
ECS\u ENABLE\u CONTAINER\u METADATA
变量设置为true时,才会设置/可用。我看不出在aws控制台中哪里可以做到这一点

此外,文档声明,可以通过在主机内将其设置为true来完成此操作,但需要重新启动docker代理

有没有其他方法可以做到这一点,而无需进入EC2内部进行设置并重新启动docker agent?

命令:

aws ecs list-tasks --cluster default
aws ecs list-tasks --cluster default --container-instance f6bbb147-5370-4ace-8c73-c7181ded911f
输出:

{
    "taskArns": [
        "arn:aws:ecs:us-east-1:<aws_account_id>:task/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84",
        "arn:aws:ecs:us-east-1:<aws_account_id>:task/6b809ef6-c67e-4467-921f-ee261c15a0a1"
    ]
}
{
    "taskArns": [
        "arn:aws:ecs:us-east-1:<aws_account_id>:task/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84"
    ]
}
输出:

{
    "taskArns": [
        "arn:aws:ecs:us-east-1:<aws_account_id>:task/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84",
        "arn:aws:ecs:us-east-1:<aws_account_id>:task/6b809ef6-c67e-4467-921f-ee261c15a0a1"
    ]
}
{
    "taskArns": [
        "arn:aws:ecs:us-east-1:<aws_account_id>:task/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84"
    ]
}
{
“taskArns”:[
“arn:aws:ecs:us-east-1::任务/0cc43cdb-3bee-4407-9c26-c0e6ea5bee84”
]
}

我使用的技术是在容器定义中设置环境变量

如果您正在管理任务,相关yaml如下所示:

  Taskdef:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ...
      ContainerDefinitions:
        - Name: some-name
          ...
          Environment:
            - Name: AWS_DEFAULT_REGION
              Value: !Ref AWS::Region
            - Name: ECS_ENABLE_CONTAINER_METADATA
              Value: 'true'
这项技术可以帮助您保持所有内容的直观性和可复制性

如果您以编程方式需要元数据,但无权访问元数据文件,则可以查询:


请注意,如果您作为正在运行的任务获取此信息,则可能无法连接到环回设备,但可以连接到EC2实例自己的IP地址。

我们使用所谓的用户数据进行设置,这些数据在机器启动时执行。有多种设置方法,例如:

它可能是这样的:

#!/bin/bash

cat <<'EOF' >> /etc/ecs/ecs.config
ECS_CLUSTER=ecs-staging
ECS_ENABLE_CONTAINER_METADATA=true
EOF
#/bin/bash
cat/etc/ecs/ecs.config
ECS_集群=ECS登台
ECS\u启用\u容器\u元数据=true
EOF

重要:调整上面的
ECS_群集
以匹配您的群集名称,否则实例将无法连接到该群集。

前面的答案是正确的,下面是另一种方法:

在运行容器的ec2实例中,运行以下命令

curl http://localhost:51678/v1/tasks | python -mjson.tool |less


这不再适用于较新的Amazon ECS容器版本,事实上,它现在简单多了,并且在默认情况下也已启用。请参阅,但这里有一个TL;博士

如果您使用的是Amazon ECS container agent版本1.39.0及更高版本,您可以在docker容器中执行此操作:

curl -s "$ECS_CONTAINER_METADATA_URI_V4/task" \
  | jq -r ".TaskARN" \
  | cut -d "/" -f 3
下面是一个列表,但如果您使用的是
:latest
,您肯定很好