
在 WSL 2 上,當我嘗試連接到網站時,遇到問題:
$ ping www.google.com
ping: www.google.com: Temporary failure in name resolution
現在,為了解決這個問題,我必須添加/etc/wsl.conf
以下內容:
[network]
generateResolvConf = true
我需要將我的更改/etc/resolv.conf
為:
nameserver 8.8.8.8
這很好用。
但是,當我重新啟動系統時,當我關閉 wsl 或執行類似操作時,/etc/resolv.conf
會被先前的值覆蓋。
當然,如果我更改/etc/wsl.conf
為以下內容並重新啟動:
[network]
generateResolvConf = false
上面提到的修復又消失了。
那麼如何/etc/resolv.conf
在 WSL 2 上將變更永久變更?
答案1
我找到了這個解決方案這裡
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
sudo chattr +i /etc/resolv.conf
答案2
我嘗試發表評論斯努澤克的回答但沒有足夠的聲譽。
來自連結解決方案在他們的回答中,加上:
[network]
generateResolvConf=false
to/etc/wsl.conf
確實會阻止 wsl 自動生成文件,但僅限於關閉一次後。完成後,配置將受到尊重,並且不需要/etc/resolv.conf
使用命令使檔案不可變chattr +i
。
若要關閉 wsl,請wsl --shutdown
在 Windows 命令提示字元下執行(這將關閉所有 WSL 發行版)。
當然,您仍然需要將 dns 伺服器新增至檔案/etc/resolv.conf
(例如):
nameserver 1.1.1.1
nameserver 1.0.0.1
答案3
這些步驟將確保/etc/resolv.conf已正確配置名稱伺服器 8.8.8.8每次 wsl 啟動時
- 為初始使用者新增 bashrc 條目
echo "sudo su -" >> ~/.bashrc
- 為初始使用者建立 sudoers 條目
sudo su -
echo "username ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/username
- 為 root 使用者新增 bashrc 條目
echo "nameserver 8.8.8.8" > /etc/resolv.conf
筆記:這將覆蓋/etc/resolv.conf文件。您可以使用sed命令根據需要進行任何特定修改