WSL1 是基於代理的虛擬化技術,它透過將 Linux 系統呼叫轉換為 Windows 系統呼叫來實現與 Windows 核心的互動。WSL2 則使用了真正的虛擬機器技術,它在 Windows主機 上執行一個輕量級的 Linux 核心。
WSL2 無法訪問 Windows 的 localhost 網路是由 WSL2 的網路架構所致。WSL2 使用了一個虛擬網路介面卡來與 Windows 主機進行通訊,這導致 WSL2 無法直接訪問 Windows 的 localhost 網路。因此,以往的 WSL2 在訪問 Windows 網路時需要將其當作 LAN 的另一個裝置,而 Windows 宿主則可以把 WSL 當作本機裝置。這導致了很多問題,尤其是梯子方面的。
WSL2 2.0 引入的映象網路可以解決 localhost 訪問問題。啟用映象網路後,WSL2 和 Windows 主機將使用相同的網路,並且可以透過 localhost 訪問本機系統上的服務。這意味著你可以在 WSL2 中訪問本機系統上執行的應用程式,以及透過本機系統訪問在 WSL2 中執行的應用程式。
在家目錄 建立檔案C:\Users\hzhiy
.wslconfig
[wsl2]
memory=4GB # 分配給 WSL 2 的記憶體大小
processors=2 # 分配給 WSL 2 的 CPU 核心數
localhostForwarding=true # 是否啟用 localhost 轉發
[experimental]
autoMemoryReclaim=gradual # 開啟自動回收記憶體,可在 gradual, dropcache, disabled 之間選擇
networkingMode=mirrored # 開啟映象網路
dnsTunneling=true # 開啟 DNS Tunneling
firewall=true # 開啟 Windows 防火牆
autoProxy=true # 開啟自動同步代理
sparseVhd=true # 開啟自動釋放 WSL2 虛擬硬碟空間
重啟WSL
管理員身份執行PowerShell:
- 停止WSL:
wsl --shutdown
- 啟動WSL:
wsl
之後就可以在 wsl 中使用 localhost 的方式來訪問宿主機上的服務了。curl http://localhost