Приложение React (в контейнере Docker) не может получить доступ к API (в контейнере Docker) в AWS EC2 - PullRequest
0 голосов
/ 02 мая 2018

мой вопрос в двух словах ... В контексте хостинга 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 с URL-адреса в мой бэкэнд, когда оба docker-контейнера размещены на одном и том же экземпляре EC2 и работают через docker-compose.

1 Ответ

0 голосов
/ 03 мая 2018

Ваше приложение реакции запускается в вашем браузере, поэтому localhost будет указывать на IP-адрес вашего локального ноутбука, а не на IP-адрес экземпляра EC2. Использование внешнего URL-адреса - правильный путь, поскольку пользователям вашего приложения также потребуется доступ к бэкэнду из внешних источников.

...