東京都府中市、渋谷区のWEB制作会社Maromaroのブログです

2023.03.20

taka

Windows+WSL2+Dockerが遅いときの簡単な解決方法、Git Cloneが上手くいかないときの手順

こんにちは
MaromaroのTAKAです。

今回はWindows+WSL2+Dockerで構築したときに、
動作が重かった時に一発で改善した方法を備忘録として残したいと思います。

ついでにWSL環境下にGitでCloneしたときに

unsafe repository

とエラーになり、Cloneできない際の解決方法も解説します。

環境(ざっくり)

Windows11 Home
WSL2 (Ubuntu)
Docker Desktop v20.10.21

はじめに

発覚した経緯はLaravelをDockerで構築した際に、
ComposerのInstallやブラウザの読み込み時間が普段の10倍ほど遅かったためです。
さすがに業務に支障が出るレベルでした。

なぜこの環境で遅くなるかといいますと、
Windows と Linux の OS ファイルシステム間でのファイルの読み込みが遅いからです。
要は普段通りWindowsの環境下にファイル群を置き、それをDockerで動かそうとすると、
WindowsとLinux間でファイルの受け渡し時に都度ファイルシステムの変換が走るからとのことです。
WSL2はWindowsの上でLinuxを動かすため、どうしても発生してしまいます。

では、どのように解決していくかを解説します。
とても簡単です。

解決手順

要するにファイルの変換が起こらないようにすれば良いので、
Linuxの環境下でDockerを構築すれば良いということです。
ディストリビューションがUbuntuの前提で解説します。

\\wsl.localhost\Ubuntu

上記フォルダ内にDockerを構築すれば良いということです。
そうすればLinux環境下のみで動かすことができるようになります。

通常は以下のフォルダに使用するファイルを格納するのが良いと思います。

\\wsl.localhost\Ubuntu\home\{ユーザー名が入ります}\

あとは通常通りコンテナを起動するだけで速度が段違いに早くなります。

もう一つ、上記で挙げたフォルダに直接GitをCloneする際にエラーが発生する可能性があります。
これはSource Treeで操作時のエラーですが以下画像のようなエラーです。

なぜこのようなことが起きるかというと以下の記事が参考になるかもしれません。
要はセキュリティ上の問題ですね。
https://gigazine.net/news/20220414-git-security-vulnerability/

具体的にどうするかというとエラーの通りCloneされるフォルダは安全という指示をgitconfigに書けば良いのです。
エラー内容にある

git config --global --add safe.directory '%(prefix)///wsl.localhost/Ubuntu/home/****/****'

をWindows環境に直接打ち込んでも良いですし、

.gitconfig に以下のように直接書いても良いと思います。

[safe]
directory = %(prefix)///wsl.localhost/Ubuntu/home/taka129/uploader2

注意点はWindowsだとバックスラッシュだとだめなのと、WSL側のGitに書いても意味が無い(恐らく)といった点です。

以上、Takaでした。