Docker создает сетевую проблему с приложением реагировать - PullRequest
0 голосов
/ 20 сентября 2019

Я запускаю приложение реагирования и сервер json с docker-compose.

Обычно я подключаюсь к серверу json из приложения реагирования следующим образом:


fetch('localhost:8080/classes')
    .then(response => response.json())
    .then(classes => this.setState({classlist:classes}));

Вотмой файл docker-compose:

version: "3"
services:
    frontend:
        container_name: react_app
        build:
            context: ./client
            dockerfile: Dockerfile
        image: praventz/react_app
        ports:
            - "3000:3000"
        volumes:
            - ./client:/usr/src/app
    backend:
        container_name: json_server
        build:
            context: ./server
            dockerfile: Dockerfile
        image: praventz/json_server
        ports:
            - "8080:8080"
        volumes:
            - ./server:/usr/src/app

проблема в том, что я не могу получить приложение реагирования для получения этой информации с сервера json.

на моей локальной машине я использую 192.168.99.100: 3000, чтобы увидеть мое реагирующее приложение

, и я использую 192.168.99.100:8080, чтобы увидеть сервер json, но я не могу связать их с любым из следующего:

backend:8080/classes

json_server:8080/classes

backend/classes

json_server/classes

{host:"json_server/classes", port:8080}

{host:"backend/classes", port:8080}

И приложение прореагировать, и сервер json отлично работают независимо с помощью docker-compose.

Что мне следует добавить в fetch ()?

1 Ответ

0 голосов
/ 20 сентября 2019

Помните, что приложение React всегда запускается в браузере какого-то пользователя;он не имеет ни малейшего представления о том, что задействован Docker, и не может получить доступ или использовать какие-либо настройки сети, связанные с Docker.

на моей локальной машине, которую я использую [...] 192.168.99.100:8080чтобы увидеть сервер json

Тогда это то, что вам нужно и в вашем приложении React.

Возможно, вы захотите настроить какой-то прокси-сервер перед этим, который может, например,переадресация путей URL-адресов, начинающихся с /api, на внутренний контейнер и пересылка других URL-адресов в контейнер внешнего интерфейса (или, что еще лучше, запуск инструмента, такого как Webpack, для компиляции приложения React в статические файлы и его непосредственного обслуживания).Если у вас есть такая настройка, то приложение React может использовать путь /api/v1/... без хоста, и он будет разрешен относительно того, что браузер считает «текущим хостом», который обычно должен быть прокси.

...