Постоянная ошибка CORS с React / Node, работающим в docker, составляется на экземпляре Amazon EC2 - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь запустить потоковую службу из модифицированной версии репо с открытым исходным кодом. https://github.com/nabendu82/streams.

У меня есть клиент-клиент в React, RTMP-сервер для поток и бэкэнд API. У меня есть docker compose файл для размещения их всех вместе. Если я запускаю docker-compose up на моем локальном компьютере, все работает отлично. Я могу посетить http://localhost: 3000 / совпадений / просмотр и увидеть два потока windows, которые не загружены, пока я не открою программу потокового вещания OBS, Settings -> Stream -> Server: rtmp://localhost/live, Stream Key: 7. Затем откроется окно правого потока .

Чтобы разместить этот репозиторий на inte rnet, я создал базовый c EC2 экземпляр на AWS (http://13.54.200.18: 3000 / совпадений / просмотр ) , Я установил docker-compose и скопировал все файлы репо до него.

Однако при работе на коробке AWS поток не загружается, и ошибка консоли всегда впечатляюще бесполезна:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://server:3002/streams/6. (Reason: CORS request did not succeed).

Так что по какой-то причине CORS не позволяет веб-интерфейсу React считывать серверную часть сервера, пока он находится на AWS.

Вот подвох. Я могу заставить потоковую передачу на хост-сайте AWS работать, но только запустив docker-compose up на моем ЛОКАЛЬНОМ компьютере одновременно. По какой-то неизвестной причине хост-версия AWS может подключиться к внутреннему серверу, работающему на моей локальной машине (а не к тому, который работает рядом с ним в docker -создать на AWS), и подключиться таким образом. Я даже могу транслировать на сайт через OBS на rtmp://13.54.200.18/live, и все работает. Но он работает только на моем локальном компьютере с инфраструктурой docker (и только если я использую вызовы 'localhost' вместо '1057 * -compose службы' server '), если кто-то еще пытается увидеть поток на действующем сайте они просто будут постоянно загружаться ... и выдают ошибку CORS.

Почему размещенный код AWS не смотрит на свой собственный docker -компонентный файл и собственный сервер: служба 3002 ? Для остального мира и для меня, если я не использую локальный сервер, он выдает ошибку CORS. Только для моего локального компьютера, и только если я запускаю локальный сервер и делаю запросы к localhost: 3002, он работает отлично.

Если я sh включу изображение AWS, то docker-compose run client curl localhost:3002/streams не удастся, но docker-compose run client curl server:3002/streams вернет мне правильные JSON данные. Из всего, что я понимаю о docker compose, мои сервисы должны иметь возможность доступа друг к другу, и, похоже, они могут, все отлично работает локально, и сервисы могут общаться друг с другом и на AWS, но просто так Ошибка CORS появляется из ниоткуда только на хост-версии AWS.

Я пробовал все под солнцем, о котором только могу подумать. Первоначально я использовал json-server, но я подумал, что это может быть проблемой (поскольку он должен специально связываться с -H 0.0.0.0), поэтому я написал свой собственный сервер Express, используя пакет cors для его замены, и там есть не было никаких изменений Я попробовал каждую конфигурацию docker -композиционных переменных, которые я могу себе представить. Насколько я понимаю, я все сделал правильно, но каким-то образом блок AWS хочет общаться с локальным хостом моего компьютера, называемым «серверная служба», то есть 0.0.0.0, а не с его собственным. Что происходит?

Хранилище здесь: https://github.com/JeremyEllingham/streams

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 20 марта 2020

Я понял, как заставить его работать, просто отправив прямо на рабочий ящик Linux IP-адрес, вместо того, чтобы пытаться заставить его работать с именами "localhost" или docker. Вид, разочарованный тем, что docker -композиция, кажется, не работает так, как я думал, но вполне функционально просто условно изменить базовый URL.

См. Также этот ответ: Реагировать на приложение (в контейнере docker) не может получить доступ к API (в контейнере docker) на AWS EC2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...