React 应用程序集代理不适用于 docker compose

React app set proxy not working with docker compose

我正在尝试使用 docker compose 构建两个容器:

  1. React 应用程序
  2. 一个由 gunicorn 驱动的烧瓶服务器

我docker编曲了他们,他们都得到了提升。当我访问反应时,它应该将来自反应应用程序的请求从端口 3000 代理到端口 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"

前端package.json

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

网上说的几乎所有内容我都试过了,就是不能代理请求。

我已经知道的一些信息:

  1. 两个容器都可用。
  2. 我可以从前端容器 ping 内部 IP 到后端,它有响应,所以没有网络问题。
  3. 当请求localhost:3000时,我的系统会调用axios发送一个POST请求(/loadData)到后端,代理部分应该做的工作然后请求应该变成somebackendip:5000/loadData/

有人能帮帮我吗?

提前致谢!

通过将 gunicorn.conf.py 更改为

bind = "0.0.0.0:5000"

解决了我的问题。

尝试在 gunicorn conf 中更改绑定到 bind = "0.0.0.0:5000",并相应地将 compose 中后端服务中的端口更改为 "127.0.0.1:5000:5000"(最后一个是可选的)