marukot-chの日記

弱小SEの雑記です

WSL2のDockerコンテナで名前解決が遅すぎる件について、ネットワークをミラーモードにすることで対処

概要

  • 事象: 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
  • バージョンは以下と同じ

marukot-ch.hatenablog.com

解決方法について

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コマンドの結果

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

参考

github.com