You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose中Nginx+React无法连接Gunicorn+Flask后端的求助

解决Nginx连接Flask后端被拒绝的问题

你遇到的核心问题是Docker容器间的网络通信误区——你的Nginx容器里配置的localhost:5000指向的是Nginx容器自身,而你的Flask服务运行在另一个独立的ner容器里,自然会出现连接拒绝的错误。下面是具体的修复方案:

1. 修改Nginx配置文件

把Nginx配置中的localhost替换为Docker Compose中Flask服务的名称ner即可。因为Compose默认会为所有服务创建一个共享网络,服务名可以直接作为域名解析到对应容器的IP地址:

server {
  listen 80;
  location / {
    index index.html;
    root /usr/share/nginx/html;
  }
  location /api/v1 {
    proxy_pass http://ner:5000/api/v1;
  }
  location /api/v2 {
    proxy_pass http://ner:5000/api/v2;
  }
}

2. 调整前端proxy配置(适配生产环境)

你package.json里的"proxy": "http://localhost:5000"只在本地开发环境(用npm start启动)生效,当前端打包部署到Nginx容器后,这个配置不会起作用。需要确保前端代码里的API请求用相对路径(比如/api/v2而不是硬编码http://localhost:5000/api/v2),这样Nginx的location规则才能捕获请求并转发到后端。

如果前端已经用了相对路径,这一步可以直接跳过;如果有硬编码的地址,建议改成相对路径,或者在构建时通过环境变量注入后端服务地址。

3. 确认Docker Compose配置的合理性

你的docker-compose.yml配置基本没问题:

  • ner服务用expose: -5000暴露了端口,且Gunicorn绑定了0.0.0.0:5000(允许容器外部访问)
  • frontend设置了depends_on: - ner,确保Flask服务优先启动

如果想更清晰,也可以给ner服务显式指定容器名(可选),不过默认的服务名解析已经足够用。

验证修复效果

修改完配置后,重新构建并启动服务:

docker-compose down
docker-compose up --build

此时你可以直接访问http://localhost/api/v2?query=xxx测试后端接口,也可以通过前端页面发起请求,查看日志应该不会再出现连接拒绝的错误了。

内容的提问来源于stack exchange,提问作者Minh Triet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:47:45