Docker for Windowsではよくあることらしいです
解決方法としてはDockerのメモリ使用量に対して上限を設けると良いようです。上限は設定の「Resources > Advanced」で出来るらしいんですが、Docker for Windowsの場合にはここでは設定できずに「.wslconfig」というファイルで設定するようにといわれます。この「.wslconfig」というファイルは存在していないので、作成して設定を書く必要があるようです。こちらの記事を参考にしました。
メモリを食いつぶす問題
タスクマネージャーを見るとわかりますが、Vmmemというタスクがメモリをガンガン食いつぶします。
この問題もIssueが立ってます。
そのうち修正は入ると思いますが、Issueでは今の回避方法の提案がされています。
Docker for Windowsを入れるまでにやったこと – Qiita
- 再起動
- WSLメモリの上限設定
- コマンドでのメモリ解放
僕にこの問題が発生したのは最近のことなのですが、記事は去年のものなのでDocker for Windowsには昔からある問題のようです。なんとかしてくれ。
「.wslconfig」を作成して設定
ユーザーフォルダに「.wslconfig」というファイルを作成して以下を設定しました。[wsl2]
memory=2GB
swap=16GB
localhostForwarding=true
先ほどの記事をコピペしただけです。ファイルを保存後Windowsを再起動。再起動後、どうなっているかを確認してみると……
2GBは「2,097,152KB」なので、概ね設定の範囲内で収まっているように見えます。この時点では起動しているコンテナに対して負荷を掛けていない状態なので、実際に何か動作させたときにどんな挙動になるかはわかりませんが少なくとも「64GBのメモリ全部使う」みたいな状況は回避できているようです。
もしお困りの方がいらっしゃいましたらご参考までに。