React app(在docker容器中)无法访问AWS EC2

时间:2018-05-02 16:57:10

标签: docker amazon-ec2 docker-compose

我的问题简而言之...... 在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。

1 个答案:

答案 0 :(得分:0)

您的反应应用程序在您的浏览器上运行因此localhost将指向您本地笔记本电脑的IP地址,而不是EC2实例的IP。使用外部网址是正确的方法,因为您的应用用户还必须从外部来源访问后端。