我的问题简而言之...... 在AWS EC2托管的上下文中,我需要做什么才能让我的前端容器从我的后端容器上的端点fetch
到本地?< /强>
详细说明:
我有2个Docker容器通过docker-compose运行。在本地,它们工作正常,我可以使用以下命令从我的前端容器(React应用程序)查询后端容器(这是一个节点应用程序):
http://localhost:3000/someendpoint
将所有内容移到AWC EC2实例后,我无法再以这种方式连接到localhost。我的文件中没有任何变化。
这是我的docker-compose.yml的一部分,其中包含有问题的2个服务:
backend:
container_name: somename-backend
image: somename-backend
environment:
NODE_ENV: production
volumes:
- ./server:/server
ports:
- "3000:3000"
frontend:
container_name: somename-frontend
image: somename-frontend
environment:
NODE_ENV: production
volumes:
- ../src:/src
ports:
- "8081:8081"
depends_on:
- backend
如果我有前端查询:
http://ec2-12-345-67-890.us-west-2.compute.amazonaws.com:3000/someendpoint
我得到了我期望的结果。但是,这是一个“外部”url查询,我认为最好将该查询设置为内部。我试过了:
http://localhost:3000/someendpoint //fails
和
http://0.0.0.0:3000/someendpoint //fails
和
http://ec2-12-345-67-890.us-west-2.compute.amazonaws.com:3000/someendpoint //succeeds
我是否需要在我的安全组中公开我可能遗漏的内容?
我将各个端口暴露给我的IP地址,并再次使用完整的公共域一切正常但我认为我不应该使用完整的公共域,以便我的反应前端到fetch
当两个docker容器都托管在同一个EC2实例上并通过docker-compose运行时,我的后端是url。
答案 0 :(得分:0)
您的反应应用程序在您的浏览器上运行因此localhost将指向您本地笔记本电脑的IP地址,而不是EC2实例的IP。使用外部网址是正确的方法,因为您的应用用户还必须从外部来源访问后端。