我有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
}
不知道问题出在哪里!如有任何帮助,我们将不胜感激!
React 应用程序实际上在用户的 Web 浏览器中运行。您的 React 容器在 ECS 上所做的所有事情就是向用户的 Web 浏览器提供原始 JavaScript 文件。在浏览器中运行的 React 应用程序内的地址
localhost
将解析为运行 Web 浏览器的本地笔记本电脑/台式计算机。这在本地适用于您,因为您也在本地计算机上运行后端 API。
要将代码部署到互联网并使 React 应用程序连接到后端,您必须将后端 API 服务器公开到互联网。这通常是在带有负载均衡器的 ECS 上完成的。然后,您需要配置您的 React 应用程序以通过其公共 DNS 地址或公共 IP 连接到后端服务器。