本地Unleash客户端连接失败排查:TypeScript项目无法连Docker实例
排查Unleash Client连接Docker部署实例的ECONNREFUSED问题
核心原因分析
你遇到的问题大概率是网络寻址不一致:浏览器/Postman跑在宿主机,能正确解析localhost到你的电脑,但你的Node.js代码如果是在Docker容器内运行,localhost指向的是容器自身,而非宿主机的Unleash实例。
分场景解决
场景1:Node.js项目运行在Docker容器中
- 方案A:使用宿主机局域网IP替换
localhost
把代码中的url改成你宿主机的局域网IP(比如http://192.168.3.10:4242/api/),可以通过ifconfig(Linux/macOS)或ipconfig(Windows)查看。 - 方案B:使用Docker自定义网络(更推荐)
- 创建专属Docker网络:
docker network create unleash-net - 重启Unleash容器并加入该网络(替换成你的启动命令):
docker run --network unleash-net --name unleash -p 4242:4242 unleashorg/unleash-server - 启动你的Node.js容器时也加入同一个网络,然后修改代码中的
url:const unleash = new Unleash({ url: 'http://unleash:4242/api/', // 用Unleash容器名作为主机名 appName: 'default', customHeaders: { Authorization: 'default:development.unleash-insecure-api-token' }, });
- 创建专属Docker网络:
场景2:Node.js项目运行在宿主机
- 检查Unleash容器的端口映射:
运行docker ps查看Unleash容器的PORTS列,确认是0.0.0.0:4242->4242/tcp(允许所有IP访问),如果是127.0.0.1:4242->4242/tcp,且你是用WSL运行Node.js,需要替换成宿主机局域网IP(WSL的localhost和宿主机不互通)。 - 临时关闭防火墙测试:
虽然Postman能访问,但部分防火墙可能会区分进程权限,临时关闭系统防火墙后重试,排除拦截可能。
额外验证点
- 确认API路径一致性:
你的代码最终请求的是http://localhost:4242/api/client/features,和Postman测试的路径完全一致吗?可以直接把这个URL复制到Postman再测一遍。 - 验证Token有效性:
虽然你用的是官方默认开发Token,但可以登录Unleash后台,在Admin > API Access里确认这个Token是否存在且启用。
内容的提问来源于stack exchange,提问作者ENV
相关产品推荐
相关产品推荐

