Реактивный набор прокси-приложений не работает с docker compose - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь использовать композицию docker для создания двух контейнеров:

  1. Приложение React
  2. A flask Сервер с Gunicorn

Я docker составил их, и оба они были усилены. Когда я посетил React, он должен был прокси-запрос от приложения React с портом 3000 на flask сервер с портом 5000. Но я столкнулся с этим:

frontend_1  | Proxy error: Could not proxy request /loadData/ from localhost:3000 to http://backend:5000.
frontend_1  | See https://nodejs.org/api/errors.html#errors_common_system_errors for more information (ECONNREFUSED).

, который, как я полагаю, означает, что он все еще не знать фактический IP-адрес бэкенда контейнера.

Вот некоторые конфигурации:

docker -compose.yml

version: "3"

services:
    backend:
        build: ./
        expose: 
            - "5000"
        ports: 
            - "5000:5000"
        volumes: 
            - .:/app
        command: gunicorn server:app -c ./gunicorn.conf.py

        networks: 
            - app-test
    frontend:
        build: ./frontend
        expose: 
            - "3000"
        ports: 
            - "3000:3000"
        volumes: 
            - ./frontend:/app
        networks: 
            - app-test
        depends_on: 
            - backend
        links:
            - backend
        command: yarn start


networks:
    app-test:
        driver: bridge

бэкэнд Dockerfile

FROM python:3.7.3

WORKDIR /app 

COPY . /app 

RUN pip install -r requirements.txt 

веб-интерфейс Dockerfile

FROM node:latest

WORKDIR /app 

COPY . /app 

gunicorn.conf.py

workers = 5
worker_class = "gevent"
bind = "127.0.0.1:5000"

пакет веб-интерфейса. json

{
  "proxy": "http://backend:5000",
}

Я попробовал почти все, что было сказано онлайн, и он просто не проксирует запрос.

Некоторая информация, которую я уже знал:

  1. Оба контейнера работают.
  2. Я могу пропинговать внутренний IP-адрес из контейнера внешнего интерфейса в бэкэнд, и он отвечает, поэтому нет проблем с сетью.
  3. когда запрашивается localhost: 3000, моя система будет вызывать Ax ios для отправить запрос POST (/ loadData) на сервер, где прокси-часть должна выполнить работу d тогда запрос должен был стать каким-то задним числом: 5000 / loadData /

Кто-нибудь может мне помочь?

Заранее спасибо!

Ответы [ 2 ]

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

Попробуйте изменить связывание на bind = "0.0.0.0:5000" в gunicorn conf и измените порты в бэкэнд-сервисе в вашем композите соответственно на "127.0.0.1:5000:5000" (последний необязательно)

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

Путем изменения gunicorn.conf.py с помощью

bind = "0.0.0.0:5000"

исправлена ​​моя проблема.

...