You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Supabase Edge Function中成功访问WSL2本地非容器内的服务?

如何在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

火山引擎 最新活动