WSL2 上の Docker container で名前解決が異常に遅い

個人PCでは Windows で WSL2 と WSL2 backend な Docker Desktop を使って開発しているが、Docker container 上での名前解決が異常に遅い。 調査していると、どうも Hyper-V のネットワークまわりに問題がありそうだが、具体的にどこがおかしいのかはわからなかった。 とりあえず Docker が使用するDNSゾルバを以下のように 8.8.8.8 に変更したところ問題が解決した。

Docker daemon config:

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "dns": [
    "8.8.8.8"
  ],
  "experimental": false
}

f:id:mrk21:20220123182954p:plain
docker daemon config

変更後は Docker Desktop を再起動する。

ついでにWSL上でも名前解決が遅かったので、以下のようにしてDNSゾルバを 8.8.8.8 に変更して解決した。

/etc/wsl.conf:

[network]
generateResolvConf = false

/etc/resolv.conf:

nameserver 8.8.8.8

変更後はWindows側で wsl.exe --shutdown をして再起動する。

なお、このときの環境は以下のとおりである。

  • OS: Windows 11 Pro
    • バージョン: 21H2
    • ビルド番号: 22000.466
  • WSL:
    • WSLバージョン: 0.51.2.0
    • カーネル バージョン: 5.10.81.1
    • WSLgバージョン: 1.0.30
  • Linuxディストリビューション: Ubuntu 20.04.3 LTS
    • WSLバージョン: 2
  • Docker Desktop: 4.4.3 (73365)
    • Engine: 20.10.12
    • Compose: 1.29.2