WindowsコンテナでMemory limit指定時に「The requested resource is in use.」で起動できない問題への対処方法


概要

WindowsイメージでMemory limit(-mオプション)を指定してコンテナを生成すると以下のエラーが発生することがあります。

docker run --rm -it -m 4G mcr.microsoft.com/windows:20H2 cmd
docker: Error response from daemon: hcsshim::CreateComputeSystem 58b22e8bf229bb443b5d5765e9523b4f77c10b4ccdfa0867877f8de7cf189532: The requested resource is in use.

-m 4G を指定することで、Windowsコンテナへメモリ4Gを割り当ててコンテナを生成できますが、エラーが発生する場合と発生しない場合があり、エラーの原因が不明でした。事例などを調べても根本原因を突き止めることができませんでした。

一方、 -m 4G を指定しない場合は正常にWindowsコンテナが生成できます。
ただし、この場合はメモリはデフォルトの1Gのみの割り当てとなります。

Microsoft Windows [Version 10.0.19042.985]
(c) Microsoft Corporation. All rights reserved.

C:\>systeminfo

...(略)...
Total Physical Memory:     1,023 MB
Available Physical Memory: 636 MB
Virtual Memory: Max Size:  2,751 MB
Virtual Memory: Available: 2,290 MB
Virtual Memory: In Use:    461 MB
...(略)...

Dockerの再起動やOSの再起動など、様々なことを試しても改善しませんでしたが、対処方法が見つかりましたので本記事にてご紹介します。

前提条件

  • Windows 10 Pro 20H2 で Docker を利用している
  • Docker Desktop for Windows 3.4.0 を利用している
  • Windows containers モードを利用している
  • mcr.microsoft.com/windows:20H2 イメージを利用している

対処方法

  1. Windowsのスタートメニューで hyper-v と入力して Hyper-V マネージャー 画面を起動します。
  2. 操作メニューから Hyper-V の設定... を開きます。
  3. 仮想マシンに物理NUMAノードをまたがるメモリを割り当てる のチェックを解除してOKボタンで確定します。
  4. Windowsのスタートメニューで service と入力して サービス 画面を起動します。
  5. 以下のサービスを再起動します。
    • Hyper-V Virtual Machine Management
    • Hyper-V ホスト コンピューティング サービス
  6. WindowsイメージでMemory limit(-mオプション)を指定してコンテナの生成を試します。
docker run --rm -it -m 4G mcr.microsoft.com/windows:20H2 cmd

Windowsコンテナへメモリ4Gを割り当ててコンテナが正しく生成されています。

Microsoft Windows [Version 10.0.19042.985]
(c) Microsoft Corporation. All rights reserved.

C:\>systeminfo

...(略)...
Total Physical Memory:     4,607 MB
Available Physical Memory: 4,163 MB
Virtual Memory: Max Size:  6,335 MB
Virtual Memory: Available: 5,847 MB
Virtual Memory: In Use:    488 MB
...(略)...