如何从 ECS 容器 运行 awsvpc 网络模式中获取我的 IP 地址?

How do I get my IP address from inside an ECS container running with the awsvpc network mode?

来自常规 ECS 容器 运行 桥接模式,或来自标准 EC2 实例,我通常 运行

curl http://169.254.169.254/latest/meta-data/local-ipv4

检索我的 IP。

在 ECS 容器中 运行 awsvpc 网络模式,我得到了底层 EC2 实例的 IP,这不是我想要的。我想要 ENI 的地址附加到我的容器。我该怎么做?

AWS 容器代理将一个新的便利环境变量注入到 AWS ECS 中的每个容器中:${ECS_CONTAINER_METADATA_URI}

这包含 URL 到元数据端点,所以现在您可以

curl ${ECS_CONTAINER_METADATA_URI}

输出类似于

{  
   "DockerId":"redact",
   "Name":"redact",
   "DockerName":"ecs-redact",
   "Image":"redact",
   "ImageID":"redact",
   "Labels":{  },
   "DesiredStatus":"RUNNING",
   "KnownStatus":"RUNNING",
   "Limits":{  },
   "CreatedAt":"2019-04-16T22:39:57.040286277Z",
   "StartedAt":"2019-04-16T22:39:57.29386087Z",
   "Type":"NORMAL",
   "Networks":[  
      {  
         "NetworkMode":"awsvpc",
         "IPv4Addresses":[  
            "172.30.1.115"
         ]
      }
   ]
}

在键 Networks 下你会发现 IPv4Address

您的应用程序代码可能看起来像这样 (python)

METADATA_URI = os.environ['ECS_CONTAINER_METADATA_URI']
container_metadata = requests.get(METADATA_URI).json()
ALLOWED_HOSTS.append(container_metadata['Networks'][0]['IPv4Addresses'][0])

来自 Amazon ECS 控制台:

  1. 单击<您的集群>
  2. 点击<您的服务>
  3. 单击“任务”选项卡
  4. 点击<你的任务>
  5. 在那里查看网络详细信息

来自 CLI:

  • 如果是 EC2,登录到实例并 运行 docker exec -it hostname -f
  • 或者直接询问 ecs - ecs-cli ps --cluster < your cluster >

作为 VPC 连接的资源,在 EC2 模式下,它也列在:

  • EC2 集群实例 IP(即检查 EC2 实例详细信息)
  • EC2 中的 'network interfaces' 部分(搜索 'arn:aws:ecs' 的描述)
import * as publicIp from 'public-ip';

const publicIpAddress = await publicIp.v4(); // your container's public IP