分享自己日常使用 WSL 遇到的问题及方案【持续更新,2026-01-21】
- 内容介绍
- 文章标签
- 相关推荐
背景
自己之前一直是使用 Mac,由于公司有合规和审计要求,所以必须使用公司提供的移动工作站,且没有管理员权限。加上自己习惯了 Linux 命令,所以就决定使用 WSL2。下面是自己遇到的一些问题和方案。
Q1:如何配置 WSL 使用 Windows 中安装的代理软件?
A1:配置 Windows 用户主目录下的 .wslconfig 文件和 WSL 用户主目录下的 .zshrc 文件。
镜像模式(推荐,仅限 Windows 11):
[wsl2]
networkingMode=Mirrored
autoProxy=false
在 ~/.zshrc 中添加:
# WSL Mirrored 模式下直接指向本地 localhost
export https_proxy="http://127.0.0.1:7890"
export http_proxy="http://127.0.0.1:7890"
export all_proxy="http://127.0.0.1:7890"
NAT 模式(Windows 10 或旧版):
[wsl2]
networkingMode=Nat
autoProxy=false
在 ~/.zshrc 中添加:
# WSL Nat 模式需要动态获取宿主机虚拟网卡 IP
host_ip=$(ip route | awk '/default/ {print $3}')
export https_proxy="http://$host_ip:7890"
export http_proxy="http://$host_ip:7890"
export all_proxy="http://$host_ip:7890"
注意:代理软件务必开启"Allow LAN"(允许局域网连接)。
Q2:WSL 中的常用工具(如 claude-code)敲字会有卡顿?引用自本站帖子
A2:这是因为 WSL 默认加载了 Windows 的环境变量。ZSH 在进行命令补全时会跨文件系统扫描 Windows 路径,导致严重的 I/O 延迟。
- 在
/etc/wsl.conf中关闭自动导入:
[interop]
appendWindowsPath=false
- 在
~/.zshrc中手动加载需要的 Windows 工具路径(避开卡顿的 PowerShell 路径):
# 手动添加常用的 Windows 工具
export PATH="$PATH:/mnt/d/Programs/Microsoft VS Code/bin"
export PATH="$PATH:/mnt/c/Windows"
# export PATH="$PATH:/mnt/c/Windows/system32"
Q3:Maven/Java 无法连接网络,DNS 解析卡死?
A3:表现为 curl 正常,但 mvn 构建长时间卡在 Downloading,或 nslookup 报错 Truncated, retrying in TCP mode。
修改 Windows 用户目录下的 .wslconfig 配置文件:
[wsl2]
dnsTunneling=false
原因:在 Mirrored 模式下,开启 dnsTunneling 后 Windows 会接管 DNS 请求。由于公司防火墙或 VPN 往往不识别这种隧道流量,会导致解析死锁。关闭它让 WSL2 回归标准 DNS 流程反而能解决问题。
Q4:为什么 Systemctl 命令报错,无法启动服务?
A4:WSL2 默认使用传统的 init 进程,而不启用 systemd,导致 systemctl start 等命令无法使用。
在 /etc/wsl.conf 中开启支持:
[boot]
systemd=true
修改后,需在 Windows PowerShell 中执行 wsl --shutdown 重启 WSL。之后即可正常管理系统服务。
Q5:配置 Ubuntu 镜像源为阿里云
A5:手动替换为阿里云镜像源可以大幅提升 apt install 下载速度。
执行以下命令:
# 备份原文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 将官方源替换为阿里云源
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 更新索引
sudo apt update
Q6:WSL 中 Podman 容器继承代理环境变量的问题
-
问题背景:
-
WSL 中设置了代理环境变量(http_proxy=http://127.0.0.1:7890)
-
运行 Podman 容器时,代理变量被继承到容器内
-
容器内的 127.0.0.1 指向容器自己,无法访问代理
-
导致容器内网络请求全部失败
-
原因分析:
-
Podman 默认会将宿主机的代理环境变量(http_proxy, https_proxy, all_proxy)传递给容器
-
容器内的 127.0.0.1 是容器网络命名空间,与 WSL 宿主机隔离
-
容器尝试连接 127.0.0.1:7890 失败,因为容器内没有运行代理服务
A6:
方案一:使用命令行参数(临时)
# run 命令
podman run --http-proxy=false alpine wget -qO- http://ifconfig.me/ip
# build 命令
podman build --http-proxy=false -t myimage .
方案二:配置别名(推荐,一劳永逸)
在 ~/.zshrc 中添加:
podman() {
if [[ "$1" == "run" || "$1" == "build" ]]; then
command podman "$1" --http-proxy=false "${@:2}"
else
command podman "$@"
fi
}
然后执行 source ~/.zshrc
验证测试:
# 测试 run - 期望输出:http_proxy=(空)和 IP 地址
podman run --rm alpine sh -c "echo \$http_proxy && wget -qO- http://ifconfig.me/ip"
# 测试 build - 期望输出同上
podman build --no-cache -t test - << 'EOF'
FROM alpine
RUN sh -c "echo \$http_proxy && wget -qO- http://ifconfig.me/ip"
EOF
关键点:
-
--http-proxy=false会同时禁用http_proxy、https_proxy、all_proxy等代理变量 -
如果在 Dockerfile 或命令行中手动指定了代理变量,会覆盖默认行为
-
如需让某个容器使用代理,可单独通过
-e http_proxy=...指定 -
Podman 配置文件
~/.config/containers/containers.conf设置[containers] http_proxy = false只对run生效,build仍需命令行参数
最后附上我的.wslconfig文件内容
PS C:\Users\Administrator> cat .\.wslconfig
[wsl2]
networkingMode=Mirrored
autoProxy=false
firewall=false
processors=8
memory=16GB
swap=0
dnsTunneling=false
网友解答:
--【壹】--:
wsl中无法上网吗?不管配不配proxy,默认都是可以上网的,你可以检查下防火墙策略啥的。
--【贰】--:
大佬,我用了window11的wsl2的mirrored。但是始终没办法连接到外部网络。配置了proxy之后请求无法被响应。大佬有什么办法吗。我用gpt5.2修了半天没解决
--【叁】--:
win10赶紧升级吧,wsl搭配11是最好的,有很多优化
--【肆】--:
这是因为WSL默认放在C盘的,你可以把WSL移到其他盘
--【伍】--:
mirror 的镜像网络模式,需要与系统和 wsl 版本匹配,否则无法使用,我之前试了下,win10,wsl2 不行
--【陆】--:
有一个问题wsl 中用cc 用alt+v粘贴不了图片 有解决办法吗?
--【柒】--:
感谢佬分享!
--【捌】--:
你的代理怎么配置的?代理软件端口对的吗?看你的描述应该是端口配置不正确或者代理没启动
--【玖】--:
多谢大佬分享
--【拾】--:
感谢分享
--【拾壹】--:
我遇到一个问题就是window下面的docker启动时会报下面的错误:
running wsl distro proxy in Ubuntu-20.04 distro: running proxy: running wslexec: An error occurred while running the command. DockerDesktop/Wsl/ExecError: c:\windows\system32\wsl.exe -d ubuntu-20.04 -u root -e /mnt/wsl/docker-desktop/docker-desktop-user-distro proxy --distro-name ubuntu-20.04 --docker-desktop-root /mnt/wsl/docker-desktop c:\program files\docker\docker\resources: exit status 1 (stderr: , wslErrorCode: DockerDesktop/Wsl/ExecError)
但是在wsl系统里面又可以用docker,重启系统都没有解决,又不想重装wsl系统和docker关联的系统,不知道有没有遇到的呢
--【拾贰】--:
我试了一下:在Windows中复制,WSL中直接粘贴的话是Windows的路径,咩有转换路径。但是可以直接拖照片到终端里面,就自动转换了路径。
--【拾叁】--:
是可以上网的,但是一直没办法使用window的网络代理,访问不了外网。防火墙关了之后 基本把能找到的ip都试了一遍。没招 不知道啥问题
--【拾肆】--:
感谢大佬
--【拾伍】--:
有哪位知道如何修改wsl docker镜像默认下载位置吗,默认下载C盘已经满了
--【拾陆】--:
谢谢大佬分享,有些细节还真不知道。
--【拾柒】--:
这个不晓得哎,我一般都是直接@图片问它
--【拾捌】--:
佬友你尝试过用虚拟网卡接管系统的流量吗?
--【拾玖】--:
我没用过docker,dockerd要root权限,我没有。所以我用podman
背景
自己之前一直是使用 Mac,由于公司有合规和审计要求,所以必须使用公司提供的移动工作站,且没有管理员权限。加上自己习惯了 Linux 命令,所以就决定使用 WSL2。下面是自己遇到的一些问题和方案。
Q1:如何配置 WSL 使用 Windows 中安装的代理软件?
A1:配置 Windows 用户主目录下的 .wslconfig 文件和 WSL 用户主目录下的 .zshrc 文件。
镜像模式(推荐,仅限 Windows 11):
[wsl2]
networkingMode=Mirrored
autoProxy=false
在 ~/.zshrc 中添加:
# WSL Mirrored 模式下直接指向本地 localhost
export https_proxy="http://127.0.0.1:7890"
export http_proxy="http://127.0.0.1:7890"
export all_proxy="http://127.0.0.1:7890"
NAT 模式(Windows 10 或旧版):
[wsl2]
networkingMode=Nat
autoProxy=false
在 ~/.zshrc 中添加:
# WSL Nat 模式需要动态获取宿主机虚拟网卡 IP
host_ip=$(ip route | awk '/default/ {print $3}')
export https_proxy="http://$host_ip:7890"
export http_proxy="http://$host_ip:7890"
export all_proxy="http://$host_ip:7890"
注意:代理软件务必开启"Allow LAN"(允许局域网连接)。
Q2:WSL 中的常用工具(如 claude-code)敲字会有卡顿?引用自本站帖子
A2:这是因为 WSL 默认加载了 Windows 的环境变量。ZSH 在进行命令补全时会跨文件系统扫描 Windows 路径,导致严重的 I/O 延迟。
- 在
/etc/wsl.conf中关闭自动导入:
[interop]
appendWindowsPath=false
- 在
~/.zshrc中手动加载需要的 Windows 工具路径(避开卡顿的 PowerShell 路径):
# 手动添加常用的 Windows 工具
export PATH="$PATH:/mnt/d/Programs/Microsoft VS Code/bin"
export PATH="$PATH:/mnt/c/Windows"
# export PATH="$PATH:/mnt/c/Windows/system32"
Q3:Maven/Java 无法连接网络,DNS 解析卡死?
A3:表现为 curl 正常,但 mvn 构建长时间卡在 Downloading,或 nslookup 报错 Truncated, retrying in TCP mode。
修改 Windows 用户目录下的 .wslconfig 配置文件:
[wsl2]
dnsTunneling=false
原因:在 Mirrored 模式下,开启 dnsTunneling 后 Windows 会接管 DNS 请求。由于公司防火墙或 VPN 往往不识别这种隧道流量,会导致解析死锁。关闭它让 WSL2 回归标准 DNS 流程反而能解决问题。
Q4:为什么 Systemctl 命令报错,无法启动服务?
A4:WSL2 默认使用传统的 init 进程,而不启用 systemd,导致 systemctl start 等命令无法使用。
在 /etc/wsl.conf 中开启支持:
[boot]
systemd=true
修改后,需在 Windows PowerShell 中执行 wsl --shutdown 重启 WSL。之后即可正常管理系统服务。
Q5:配置 Ubuntu 镜像源为阿里云
A5:手动替换为阿里云镜像源可以大幅提升 apt install 下载速度。
执行以下命令:
# 备份原文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 将官方源替换为阿里云源
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 更新索引
sudo apt update
Q6:WSL 中 Podman 容器继承代理环境变量的问题
-
问题背景:
-
WSL 中设置了代理环境变量(http_proxy=http://127.0.0.1:7890)
-
运行 Podman 容器时,代理变量被继承到容器内
-
容器内的 127.0.0.1 指向容器自己,无法访问代理
-
导致容器内网络请求全部失败
-
原因分析:
-
Podman 默认会将宿主机的代理环境变量(http_proxy, https_proxy, all_proxy)传递给容器
-
容器内的 127.0.0.1 是容器网络命名空间,与 WSL 宿主机隔离
-
容器尝试连接 127.0.0.1:7890 失败,因为容器内没有运行代理服务
A6:
方案一:使用命令行参数(临时)
# run 命令
podman run --http-proxy=false alpine wget -qO- http://ifconfig.me/ip
# build 命令
podman build --http-proxy=false -t myimage .
方案二:配置别名(推荐,一劳永逸)
在 ~/.zshrc 中添加:
podman() {
if [[ "$1" == "run" || "$1" == "build" ]]; then
command podman "$1" --http-proxy=false "${@:2}"
else
command podman "$@"
fi
}
然后执行 source ~/.zshrc
验证测试:
# 测试 run - 期望输出:http_proxy=(空)和 IP 地址
podman run --rm alpine sh -c "echo \$http_proxy && wget -qO- http://ifconfig.me/ip"
# 测试 build - 期望输出同上
podman build --no-cache -t test - << 'EOF'
FROM alpine
RUN sh -c "echo \$http_proxy && wget -qO- http://ifconfig.me/ip"
EOF
关键点:
-
--http-proxy=false会同时禁用http_proxy、https_proxy、all_proxy等代理变量 -
如果在 Dockerfile 或命令行中手动指定了代理变量,会覆盖默认行为
-
如需让某个容器使用代理,可单独通过
-e http_proxy=...指定 -
Podman 配置文件
~/.config/containers/containers.conf设置[containers] http_proxy = false只对run生效,build仍需命令行参数
最后附上我的.wslconfig文件内容
PS C:\Users\Administrator> cat .\.wslconfig
[wsl2]
networkingMode=Mirrored
autoProxy=false
firewall=false
processors=8
memory=16GB
swap=0
dnsTunneling=false
网友解答:
--【壹】--:
wsl中无法上网吗?不管配不配proxy,默认都是可以上网的,你可以检查下防火墙策略啥的。
--【贰】--:
大佬,我用了window11的wsl2的mirrored。但是始终没办法连接到外部网络。配置了proxy之后请求无法被响应。大佬有什么办法吗。我用gpt5.2修了半天没解决
--【叁】--:
win10赶紧升级吧,wsl搭配11是最好的,有很多优化
--【肆】--:
这是因为WSL默认放在C盘的,你可以把WSL移到其他盘
--【伍】--:
mirror 的镜像网络模式,需要与系统和 wsl 版本匹配,否则无法使用,我之前试了下,win10,wsl2 不行
--【陆】--:
有一个问题wsl 中用cc 用alt+v粘贴不了图片 有解决办法吗?
--【柒】--:
感谢佬分享!
--【捌】--:
你的代理怎么配置的?代理软件端口对的吗?看你的描述应该是端口配置不正确或者代理没启动
--【玖】--:
多谢大佬分享
--【拾】--:
感谢分享
--【拾壹】--:
我遇到一个问题就是window下面的docker启动时会报下面的错误:
running wsl distro proxy in Ubuntu-20.04 distro: running proxy: running wslexec: An error occurred while running the command. DockerDesktop/Wsl/ExecError: c:\windows\system32\wsl.exe -d ubuntu-20.04 -u root -e /mnt/wsl/docker-desktop/docker-desktop-user-distro proxy --distro-name ubuntu-20.04 --docker-desktop-root /mnt/wsl/docker-desktop c:\program files\docker\docker\resources: exit status 1 (stderr: , wslErrorCode: DockerDesktop/Wsl/ExecError)
但是在wsl系统里面又可以用docker,重启系统都没有解决,又不想重装wsl系统和docker关联的系统,不知道有没有遇到的呢
--【拾贰】--:
我试了一下:在Windows中复制,WSL中直接粘贴的话是Windows的路径,咩有转换路径。但是可以直接拖照片到终端里面,就自动转换了路径。
--【拾叁】--:
是可以上网的,但是一直没办法使用window的网络代理,访问不了外网。防火墙关了之后 基本把能找到的ip都试了一遍。没招 不知道啥问题
--【拾肆】--:
感谢大佬
--【拾伍】--:
有哪位知道如何修改wsl docker镜像默认下载位置吗,默认下载C盘已经满了
--【拾陆】--:
谢谢大佬分享,有些细节还真不知道。
--【拾柒】--:
这个不晓得哎,我一般都是直接@图片问它
--【拾捌】--:
佬友你尝试过用虚拟网卡接管系统的流量吗?
--【拾玖】--:
我没用过docker,dockerd要root权限,我没有。所以我用podman

