概要
- 事象: WSL2のDockerコンテナで名前解決をすると、毎回5秒以上かかる
- WSL2上だと1秒未満。WSL2のDockerコンテナ上でもIPアドレス指定は1秒未満
- 対応策(WindowsでDocker Desktopを使っていない場合:
- Windowsのバージョンを23H2にアップデート*1
- WSL2の設定を修正し、ネットワークをミラーモードに変更&WSL2を再起動
- WSL2のDockerホストでiptablesをfalseに変更&dockerサービスを再起動
目次
WSL2のDockerコンテナで名前解決をすると、毎回5秒以上かかる事象について
再現手法
- 以下のコマンドを実行すると、なぜかよく分からないが5秒以上かかってしまう
docker run --rm -it --name ubuntu-docker docker.io/library/ubuntu:latest bash apt-get update -y; apt-get install iputils-ping net-tools curl -y date +%H:%M:%S.%3N;curl -s https://google.co.jp|tail -1|cut -c 1;date +%H:%M:%S.%3N
- 結果
// WSL2自体は早い ~$ date +%H:%M:%S.%3N;curl -s https://www.google.co.jp|tail -1|cut -c 1;date +%H:%M: %S.%3N 22:54:58.538 a 22:54:58.870 root@aa752a49b994:/# date +%H:%M:%S.%3N;curl -s https://www.google.co.jp|tail -1|cut -c 1;date +%H:%M:%S.%3N 13:55:54.272 a 13:55:59.586
- バージョンは以下と同じ
解決方法について
Windowsのバージョンを23H2にアップデート
- WSL2のネットワークをミラーモードにするためには、Windowsのバージョンが23H2である必要があるため、アップデート
WSL2の設定を修正
- WSL2の設定を修正し、ネットワークをミラーモードに変更
- 以下パスを好きなエディタで開く
%USERPROFILE%\.wslconfig
- 以下を末尾に追記
- 以下パスを好きなエディタで開く
[experimental] networkingMode=mirrored hostAddressLoopback=true
- WSL2を再起動
$ wsl --shutdown $ wsl
WSL2のDockerホストの設定変更
- DockerホストはUbuntu 20.04を使っているので、そちらで以下作業
- iptablesをfalseに変更
sudo vim /etc/docker/daemon.json
- 通信遅いなぁと思って「 "dns": ["10.0.0.2", "8.8.8.8"]」を追記してたのを削除
~$ cat /etc/docker/daemon.json { "iptables": false }
- dockerサービスを再起動
sudo systemctl stop docker; sudo systemctl start docker
問題が解決されたことを確認
- 再現手法を実行し、0.2秒くらいで実行されることを確認
root@a546d2886852:/# date +%H:%M:%S.%3N;curl -s https://google.co.jp|tail -1|cut -c 1;date +%H:%M:%S.%3N 07:37:15.190 < 07:37:15.409
バージョン
Windowsのバージョン
C:\Users\maruk>ver Microsoft Windows [Version 10.0.22631.2861]
winverコマンドの結果
WSL2のバージョン
C:\Users\maruk>wsl.exe --version WSL バージョン: 2.0.14.0 カーネル バージョン: 5.15.133.1-1 WSLg バージョン: 1.0.59 MSRDC バージョン: 1.2.4677 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows バージョン: 10.0.22631.2861
Dockerのバージョン
~$ docker version Client: Docker Engine - Community Version: 24.0.7 API version: 1.43 Go version: go1.20.10 Git commit: afdd53b Built: Thu Oct 26 09:07:41 2023 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 24.0.7 API version: 1.43 (minimum version 1.12) Go version: go1.20.10 Git commit: 311b9ff Built: Thu Oct 26 09:07:41 2023 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.26 GitCommit: 3dd1e886e55dd695541fdcd67420c2888645a495 runc: Version: 1.1.10 GitCommit: v1.1.10-0-g18a0cb0 docker-init: Version: 0.19.0 GitCommit: de40ad0