WSL2 で名前解決出来ない問題

WSL2 で DNS で名前解決出来ない問題が発生しました。

Temporary failure resolving 'archive.ubuntu.com'

などの表示が出て、名前解決が出来なくなったというものです。

結論としては、Docker 公式の apt パッケージから Docker の最新版を入れたのが原因でネットワークが極端に不安定になる問題が発生したということだったのですが、 nameserver の設定方法を試したのでまとめておきます。

ちなみに、Docker 最新版を削除し、 Ubuntu 20 が標準で提供する Docker に戻したら問題は解決しました。一見すると名前解決の問題のようですが、問題はネットワーク自体に発生していたということでした。

WSL の nameserver 設定

WSL の /etc/resolv.conf は自動生成され、編集しても上書きされてしまいます。

上書きを無効にするには、 /etc/wsl.conf として下記の設定を行います。

[network]
generateResolvConf = false

/etc/resolv.conf はシンボリックリンクなので、

❯ sudo unlink /etc/resolv.conf
❯ sudo vi /etc/resolv.conf

として、好きな nameserver を指定します。

nameserver 1.1.1.1
nameserver 8.8.8.8

あとは、Windows 側から

wsl --shutdown

をしてWSLをシャットダウンさせて再度起動し、 nameserver が書き換わっていないことを確認します。