React 应用程序集代理不适用于 docker compose
React app set proxy not working with docker compose
我正在尝试使用 docker compose 构建两个容器:
- React 应用程序
- 一个由 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",
}
网上说的几乎所有内容我都试过了,就是不能代理请求。
我已经知道的一些信息:
- 两个容器都可用。
- 我可以从前端容器 ping 内部 IP 到后端,它有响应,所以没有网络问题。
- 当请求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"
(最后一个是可选的)
我正在尝试使用 docker compose 构建两个容器:
- React 应用程序
- 一个由 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",
}
网上说的几乎所有内容我都试过了,就是不能代理请求。
我已经知道的一些信息:
- 两个容器都可用。
- 我可以从前端容器 ping 内部 IP 到后端,它有响应,所以没有网络问题。
- 当请求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"
(最后一个是可选的)