Docker Desktop を WSL2ベースエンジンに変更したところ、ElasticSearchで久しぶりに以下のエラーに遭遇
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
以下、試してみた対処法の備忘録です。
目次
成功
手動設定
とりあえず、まずは手動対応。
docker-desktopに入って(wsl -d docker-desktop
)、以下のコマンドで対応
sysctl -w vm.max_map_count=262144
Result
設定成功。
ElasticSearch起動成功。
ただし、毎回、Docker Desktop起動後に対応が必要
.wslconfigを利用
以下のコメントを参照。
Hi, we finnaly found the trick via the .wslconfig file :
https://stackoverflow.com/questions/69214301/using-docker-desktop-for-windows-how-can-sysctl-parameters-be-configured-to-per/69294687#69294687
以下、リンク先の解説に従って、.wslconfig
を追加し、以下の内容を追加
[wsl2] kernelCommandLine = "sysctl.vm.max_map_count=262144"
※ .wslconfig
の場所は、%userprofile%
。基本、C:\Users\<username>
でいいと思います。
設定後、Docker Desktopを終了して、wsl --shutdown
したあと、再起動。
Result
設定成功。
ElasticSearch起動成功。
今のところ、問題なく動作しています。
※ 今後、動作に問題があった場合は追記予定です。
補足
先述の手順で、Docker Desktopの終了のみで、wsl --shutdown
をしないとvm.max_map_count
の設定が適用されていませんでした。
他のディストリビューションが起動したままだったので、一つでも残ってると適用されないのかもしれません。
リンク先だと、Docker Desktopの終了については触れられていませんが、アプリだけ起動したままの状態が不安だったので、念のためwsl --shutdown
の前に終了しています。
参考ページ
その他、試してみた事
不安定
crontabを利用
crontabを使用した、対処法。
まずは、念のため、docker-desktopをバックアップします。
Docker Desktopを停止して、以下を実行
wsl --export docker-desktop "[path-to-backup]/[backup-file-name].tar"
バックアップ後、以下を実行
# docker-desktop内に入る wsl -d docker-desktop # 実行ファイルの作成 mkdir -p /my/scripts echo "sysctl -w vm.max_map_count=262144" > /my/scripts/at_reboot.sh chmod +x /my/scripts/at_reboot.sh # crontabのバックアップ crontab -l > crontab.backup
crontab -e
でcrontabの編集。以下を追記
@reboot /my/scripts/at_reboot.sh
Docker Desktopを再起動。
以下のコマンドで、設定の確認。
wsl -d docker-desktop sysctl -a | grep vm.max_map_count
vm.max_map_count = 262144
の表示があれば成功です。
必要に合わせてバックアップ。Docker Desktopを停止して以下を実行。
wsl --export docker-desktop "[path-to-backup]/[backup-file-name].tar"
Result
設定不安定。
ElasticSearch起動不安定。
たまに、vm.max_map_count = 262144
の設定がされていなくて、動かない。
参考リンク
不可?
「/etc/sysctl.d/*」または「/etc/sysctl.conf」を利用
以下を参考に/etc/sysctl.d/99-my-custom.conf
、/etc/sysctl.d/00-alpine.conf
、/etc/sysctl.conf
にvm.max_map_count = 262144
を追記。
Result
設定不安定。
ElasticSearch起動不安定。
1回か2回ほど、たまたま動作した事がありましたが、手順ミスの可能性もありそうなので、見出しでは[不可?]としています。
wsl.confを利用
.wslconfig
について調べていて、以下の記事でwsl.conf
でディストリビューションごとの設定が行えるということが紹介されていました。
[boot]
設定でできそうかなと思い、試してみました。
以下のコマンドでwsl.conf
を開きます。
wsl -d docker-desktop vi /etc/wsl.conf
以下の内容を追記
[boot] command="sysctl -w vm.max_map_count=262144"
再起動して、設定確認。
Result
設定不可。
ElasticSearch起動不可。
できそうかなと思ったんですが、うまく行きませんでした。
補足
docker-desktop内のファイルの編集について
編集前に、wsl --export
でバックアップを取っておいた方がいいと思います。
また、本記事ではdocker-desktop内でファイルの編集をしていますが、ファイルエクスプローラのアドレスバーに\\wsl$
を入力すると、Windows上でdocker-desktopのファイルを開くことができるので、それでもいいかもしれません。
動作は未確認ですが、Windowsで編集した内容はdocker-desktop内でも変更が確認できました。
まとめ
今のところ、.wslconfig
を利用した方法が問題なく動いているので、.wslconfig
の利用が無難化と思います。
※ 問題が出た場合は、追記予定です。
wsl.conf
でdocker-desktopだけに変更が適用できればと思ったのですが、残念ながらうまく行きませんでした。
これ以上は、ドツボ感があるので、一旦休止。
他にいい方法あるよ!といった場合は、コメントなどから教えてもらえると助かります。