Docker部署React+MongoDB项目接口请求报ECONNREFUSED错误如何解决
报错原因
该报错是Docker容器网络隔离特性导致的:
- 你在宿主机浏览器访问
localhost:5000/loadUsers能成功,是因为后端容器的5000端口已经映射到了宿主机的5000端口,宿主机网络可以直接访问 - React前端跑在独立的容器内,容器内的
localhost指向的是前端容器自身,而前端容器内部没有服务监听5000端口,所以代理请求到http://localhost:5000时会触发连接拒绝错误
解决方法
- 如果你使用docker-compose编排服务:修改前端的代理配置,将代理目标地址从
http://localhost:5000改成后端服务的服务名,比如docker-compose.yml中后端服务命名为backend,就改为http://backend:5000,Docker内置DNS会自动将服务名解析为对应容器的内网IP,实现跨容器通信 - 如果你是单独启动容器:可以将代理目标地址改为
http://host.docker.internal:5000,host.docker.internal是Docker提供的特殊域名,会自动指向宿主机IP,即可访问到宿主机映射的后端端口 - 额外确认:后端服务启动时要监听
0.0.0.0地址,不要绑定127.0.0.1,比如Node服务启动代码要写为app.listen(5000, '0.0.0.0'),否则其他容器无法访问该后端服务
修改完成后重启容器即可生效。
内容的提问来源于stack exchange,提问作者ioanna marinou
相关产品推荐
相关产品推荐

