首页 > 解决方案 > 如何从 AWS Fargate Docker 容器访问主机 IP 地址

问题描述

我通过 Fargate Docker 在 AWS 上托管我的节点应用程序。如何将 Fargate 的容器公共 IP 地址传递给我的 node.js 应用程序?

Fargate 仅在部署我的应用程序后提供公共 IP 地址,因此在我的任务运行之前我无法将该地址作为 ENV 变量传递给应用程序。

我的节点应用程序必须将用户重定向到它的应用程序 URL,但我需要公共地址,我相信......

我在哪里可以阅读更多关于此的信息?

我是 AWS 和容器的新手,所以提前感谢大家的帮助!

标签: amazon-web-servicesdockeramazon-ec2containersaws-fargate

解决方案


您可以启用容器元数据并查找HostPublicIPv4Address

Fargate 实例中的元数据文件示例:

{
    "Cluster": "default",
    "ContainerInstanceARN": "arn:aws:ecs:us-west-2:012345678910:container-instance/default/1f73d099-b914-411c-a9ff-81633b7741dd",
    "TaskARN": "arn:aws:ecs:us-west-2:012345678910:task/default/2b88376d-aba3-4950-9ddf-bcb0f388a40c",
    "TaskDefinitionFamily": "console-sample-app-static",
    "TaskDefinitionRevision": "1",
    "ContainerID": "aec2557997f4eed9b280c2efd7afccdcedfda4ac399f7480cae870cfc7e163fd",
    "ContainerName": "simple-app",
    "DockerContainerName": "/ecs-console-sample-app-static-1-simple-app-e4e8e495e8baa5de1a00",
    "ImageID": "sha256:2ae34abc2ed0a22e280d17e13f9c01aaf725688b09b7a1525d1a2750e2c0d1de",
    "ImageName": "httpd:2.4",
    "PortMappings": [
        {
            "ContainerPort": 80,
            "HostPort": 80,
            "BindIp": "0.0.0.0",
            "Protocol": "tcp"
        }
    ],
    "Networks": [
        {
            "NetworkMode": "bridge",
            "IPv4Addresses": [
                "192.0.2.0"
            ]
        }
    ],
    "MetadataFileStatus": "READY",
    "AvailabilityZone": "us-east-1b",
    "HostPrivateIPv4Address": "192.0.2.0",
    "HostPublicIPv4Address": "203.0.113.0"
}

推荐阅读