AWS ECS 中同一个任务的容器之间如何通信?

问题描述 投票:0回答:1

我有2个docker ECR镜像:flask-server(在端口5000上)和react-client(Nginx,托管在端口80上)。我将它们放在 AWS ECS 中的同一个任务中。 我必须从我的反应客户端(前端)容器向后端 Flask 容器发出 REST 请求。虽然,在我的本地运行两个 dockerfiles 后,一切正常。

我尝试将 http://localhost:5000 放入react-client代码中,我也尝试了http://flask-container:5000,但似乎没有任何效果。我可以看到反应任务已启动,因为我可以通过公共 IP 查看它,并且当我尝试使用 Postman 从外部 IP 访问端点时,我知道 Flask 应用程序也在工作。但客户端无法找到服务器容器。我还提供了服务发现。
编辑:我在 AWS ECS 网络中使用 AWSVPC 模式。

以下是我的任务定义:

{
    "family": "ABC",
    "containerDefinitions": [
        {
            "name": "ABC-client",
            "image": "###",
            "cpu": 0,
            "portMappings": [
                {
                    "name": "ABC-client-80-tcp",
                    "containerPort": 80,
                    "hostPort": 80,
                    "protocol": "tcp",
                    "appProtocol": "http"
                }
            ],
            "essential": true,
            "environment": [],
            "environmentFiles": [],
            "mountPoints": [],
            "volumesFrom": [],
            "ulimits": [],
            "systemControls": []
        },
        {
            "name": "ABC-server",
            "image": "###",
            "cpu": 0,
            "portMappings": [
                {
                    "name": "5000",
                    "containerPort": 5000,
                    "hostPort": 5000,
                    "protocol": "tcp",
                    "appProtocol": "http"
                }
            ],
            "essential": false,
            "environment": [
                {
                    "name": "EMAIL_PASSWORD",
                    "value": "###"
                }
            ],
            "environmentFiles": [],
            "mountPoints": [],
            "volumesFrom": [],
            "systemControls": []
        }
    ],
    "executionRoleArn": "arn:aws:iam::aws-account-id:role/ecsTaskExecutionRole",
    "networkMode": "awsvpc",
    "volumes": [],
    "placementConstraints": [],
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "1024",
    "memory": "3072",
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    },
    "enableFaultInjection": false
}

不知道问题出在哪里!如有任何帮助,我们将不胜感激!

amazon-web-services docker devops amazon-ecs
1个回答
0
投票

React 应用程序实际上在用户的 Web 浏览器中运行。您的 React 容器在 ECS 上所做的所有事情就是向用户的 Web 浏览器提供原始 JavaScript 文件。在浏览器中运行的 React 应用程序内的地址

localhost
将解析为运行 Web 浏览器的本地笔记本电脑/台式计算机。这在本地适用于您,因为您也在本地计算机上运行后端 API。

要将代码部署到互联网并使 React 应用程序连接到后端,您必须将后端 API 服务器公开到互联网。这通常是在带有负载均衡器的 ECS 上完成的。然后,您需要配置您的 React 应用程序以通过其公共 DNS 地址或公共 IP 连接到后端服务器。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.