WSL 中 VS Code Remote 连接 Copilot 代理配置问题及解决
问题表现
在 WSL 中使用 VS Code Remote 连接时,Copilot 可能出现以下问题:
- 对话没有输出
- 显示 fetch failed
- 模型名称不显示
问题分析
查看 Copilot Chat 的 output 面板,若显示 proxies 相关问题,通常是因为 WSL 中运行的 VS Code 调用了宿主机的 proxy 设置。
该选项默认开启,会在 VS Code 远程连接 WSL 开发中继承宿主机的 proxy 本地设置。如果使用的是宿主机本机运行的代理程序,proxy 的 ip 会设置为 127.0.0.1。但在 WSL 中想要访问宿主机的代理端口,ip 并不是 127.0.0.1(这会访问到 WSL 自己),而是需要通过如下方式查询宿主机 IP,然后访问到宿主机上的代理端口:
hostip=$(ip route show |grep -i default |awk'{ print $3}')
echo $hostip
例如输出为 172.25.48.1。因此 WSL 中要通过 172.25.48.1 IP 来访问宿主机上的端口。
逻辑说明:
- WSL 2 / VS Code Remote 连接 Windows Host (宿主机)
- 监听端口 X
- 返回 172.25.48.1
- 默认 Proxy: 127.0.0.1 -> Connection Refused (Self)
- 正确 Proxy: 172.25.48.1:Port X -> Traffic Forwarded
- Loopback: 127.0.0.1
- Query:
ip route show | awk '{ print $3}'
问题解决
- 如果可以通过网络直连,直接关闭
http: Use Local Proxy Configuration。 - 如果依然需要设置代理,完成上述步骤后,修改如下设置:
- 将代理地址指向宿主机在 WSL 中的网关 IP。
注意:部分方案建议将 Copilot 完全工作在宿主机上(即设置的
"GitHub.copilot": [ "ui" ]),但这会导致 Copilot 无法修改 WSL 中的文件,Agent 模式将失效。
WSL 和宿主机网络互访
在 WSL 命令行中利用宿主机代理软件,可以使用以下脚本自动获取宿主机的 IP,并利用宿主机上的本地代理软件来代理 WSL 中的网络请求。
#!/bin/sh
hostip=$(ip route show |grep -i default |awk'{ print $3}')
wslip=$(hostname -I |awk'{print $1}')
port=7890
PROXY_HTTP="http://${hostip}:${port}"
PROXY_SOCKS5="socks5://${hostip}:${port}"
set_proxy(){
export http_proxy=
HTTP_PROXY=
https_proxy=
HTTPS_proxy=
ALL_PROXY=
all_proxy=
git config --global http.https://github.com.proxy
git config --global https.https://github.com.proxy
}
(){
http_proxy
HTTP_PROXY
https_proxy
HTTPS_PROXY
ALL_PROXY
all_proxy
git config --global -- http.https://github.com.proxy
git config --global -- https.https://github.com.proxy
}
(){
resp=$(curl -I -s --connect-timeout 5 -m 5 -w -o /dev/null www.google.com)
[ = 200 ];
}
[ = ];
set_proxy
[ = ];
unset_proxy
[ = ];
test_setting


