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

Docker Compose部署React+Express项目代理请求报ECONNREFUSED错误如何解决

问题原因

Docker 容器内部的 localhost 指向的是容器自身的网络命名空间,和宿主机、其他容器的网络互相隔离。你在前端容器内把代理目标设为 http://localhost:5000,会请求前端容器自身的5000端口,而不是宿主机或者后端容器的5000端口,所以会出现连接拒绝错误。本地直接运行时前后端都在宿主机同一个网络下,localhost 指向一致所以没有问题。另外你当前的 docker-compose.yml 中存在挂载路径写法错误,也可能导致修改的配置没有正常同步到容器内。

修复步骤
  1. 修正前端 setUpProxy.js 代理配置
    同一个 Docker Compose 集群下的服务可以直接用服务名作为域名互相访问,将代理目标地址改为后端服务的服务名 server,同时添加 changeOrigin 参数避免跨域相关问题:
const  {createProxyMiddleware}  = require('http-proxy-middleware')   
module.exports = function(app) {
    app.use(createProxyMiddleware('/auth/google', { 
        target: 'http://server:5000',
        changeOrigin: true
    }))
    app.use(createProxyMiddleware('/api/*', { 
        target: 'http://server:5000',
        changeOrigin: true
    }))
}
  1. 修正 docker-compose.yml 的挂载路径
    你当前的挂载配置使用了相对路径 ./app 作为容器内路径,会导致代码挂载位置错误,改为容器内绝对路径 /app:
version: '3'
services:
  web:
    build: ./client/
    ports:
      - "3000:3000"
    volumes:
      - /app/node_modules
      - ./client:/app # 修正为容器内绝对路径
  server:
    build: ./server
    ports:
      - "5000:5000"
    volumes:
      - /app/node_modules
      - ./server:/app # 修正为容器内绝对路径
  1. 重启服务生效
    执行以下命令重启集群,确保所有配置更新生效:
docker compose down
docker compose up --build
排查验证方法
  • 执行 docker compose ps 确认 web、server 两个服务状态均为 Up
  • 执行 docker compose exec web curl http://server:5000/api/current_user,如果返回正常响应说明容器间网络连通正常
  • 代理配置可临时添加 logLevel: 'debug' 参数,查看容器日志确认代理转发的目标地址是否正确

内容的提问来源于stack exchange,提问作者Luk Aron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:06:04