如何从 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 控制台:
- 单击<您的集群>
- 点击<您的服务>
- 单击“任务”选项卡
- 点击<你的任务>
- 在那里查看网络详细信息
来自 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
来自常规 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 控制台:
- 单击<您的集群>
- 点击<您的服务>
- 单击“任务”选项卡
- 点击<你的任务>
- 在那里查看网络详细信息
来自 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