WSL2のDockerで”[internal] load metadata for docker.io/library…”がやたら遅い問題
WSL2のDockerで”[internal] load metadata for docker.io/library…”がやたら遅い問題
WSL2でdocker buildやdocker pullすると、”[internal] load metadata for docker.io/library…”に2~3分かかる。
解決策
~/.docker/config.jsonを編集して、”credsStore”: “docker.exe”を消す。
{ "auths": { "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com": {}, "https://index.docker.io/v1/": {} }, "credsStore": "docker.exe" <<-- これを消す }
Docker DesktopやWindowsを再起動すると設定ファイルが元に戻ってしまうみたいです。jqを使って、こんなワンライナーで対応することにしました。
cat <<< $(jq 'del(.credsStore)' ~/.docker/config.json ) > ~/.docker/config.json
<<<やら>やらで、やたらリダイレクトしてるのはsedのようにファイルを上書きするオプションがjqにないためです。
この対策でメタデータの取得は2~3秒と、正常になりました。Dockerの認証にかかわる部分を省略するように変えているので、プライベートイメージの利用などには注意が必要かもしれません。
参考1)https://github.com/docker/for-win/issues/12995
参考2)https://github.com/docker/for-win/issues/10247
参考3)https://stackoverflow.com/questions/36565295/jq-to-replace-text-directly-on-file-like-sed-I
あとがき
先週はLaravel 10の正式リリースや、個人的に愛用していたフォントRictyなどのいろいろニュースがあったので、今日のブログネタに困らなそうでしたが、ちょうどこの問題にあたったので書きました。
察するに、Docker Desktop for WindowsでDockerを導入したWSL2の環境でdocker runなどしたときに発生するトラブルっぽいです。私はもはやWSLがないと何も開発できない体になってしまいましたが、Dockerに関してはnertctlなど別のコンテナツールを使うのもありかもしれません。