如何在Supabase Edge Function中成功访问WSL2本地非容器内的服务?
我刚好遇到过和你几乎一模一样的场景,给你几个针对Supabase Edge Function + WSL2的实用解决步骤,完全不用碰Docker的底层配置:
问题根源先理清楚
你的Supabase Edge Function是通过Supabase CLI运行在Docker容器里的,这个容器属于WSL2环境的Docker实例。所以容器里的localhost是它自己的内部网络,根本不是你的WSL Ubuntu主机或者Windows主机的本地服务地址;之前试的172.17.0.1是Docker默认网桥的网关,但WSL2的网络结构比较特殊,这个地址没法直接访问到WSL里的本地服务;host.docker.internal在WSL2的Docker中通常映射的是Windows主机的IP,而不是你运行服务的WSL Ubuntu主机IP,所以也没用。
具体解决步骤
第一步:获取WSL2 Ubuntu主机的实际IP
在你的WSL2 Ubuntu终端里执行这条命令,拿到WSL主机在局域网内的真实IP:hostname -I | awk '{print $1}'你会得到一个类似
172.28.156.78的IP地址,这就是关键。第二步:修改Edge Function的请求地址
把代码里的请求地址替换成刚才拿到的IP,比如:const apiResponse = await fetch('http://172.28.156.78:8000/home');第三步:确保本地服务监听正确的地址
你跑在8000端口的服务必须绑定到0.0.0.0而不是127.0.0.1,不然它只会接受WSL主机内部的请求,容器根本访问不到。举个例子,如果是用FastAPI启动服务,要改成:uvicorn main:app --host 0.0.0.0 --port 8000其他框架类似,只要让服务监听所有可用的网络接口就行。
这样设置之后,你的Supabase Edge Function就能顺利访问到WSL2里的本地非容器服务了,完全符合你要的Supabase特定解决方案的要求,不用动任何Supabase CLI的配置。
内容来源于stack exchange




