Open3

Windowsコンテナを動かしていると勝手にスリープから復帰する

okuokuokuoku

... 何で。。?

まぁそもそもWindows Serverはsleepとかしないから、そういう問題を踏む人が居ないんだろう。。

okuokuokuoku

要因とスケジュールを確認

Wakeup要因は powercfg /lastwake で確認できる。

PS C:\WINDOWS\system32> powercfg /lastwake
スリープ状態の解除履歴カウント - 1
スリープ状態の解除履歴 [0]
  スリープ状態の解除元カウント - 1
  スリープ状態の解除元 [0]
    種類: スリープ解除タイマー
    所有者: [SERVICE] \Device\VhdHardDisk{1b4378e4-1640-481d-aea5-a35a438cb621}\Windows\System32\svchost.exe
    所有者によって示された理由: Windows は、スリープ状態の解除を要求したスケジュールされたタスク 'Maintenance Activator' を実行します。

このとき、ストレージがVhdHardDiskになっているので、物理ディスクではないことがわかる。このPCではHyper-Vを使っていないので怪しいのはDockerだけとなる。

スリープ解除タイマーでwakeupされたということは、何かしらスケジュールされていることになる。スケジュールされたタイマーは powercfg /waketimers でわかる。

PS C:\WINDOWS\system32> powercfg /waketimers
[PROCESS] \Device\HarddiskVolume4\Windows\SystemApps\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\StartMenuExperienceHost.exe によって設定されたタイマーは 4:00:00 (退̦E) で有効期限が切れます。

[SERVICE] \Device\VhdHardDisk{1b4378e4-1640-481d-aea5-a35a438cb621}\Windows\System32\svchost.exe によって設定されたタイ マーは 13:13:53 (2024/06/06) で有効期限が切れます。
  理由: Windows は、スリープ状態の解除を要求したスケジュールされたタスク 'Maintenance Activator' を実行します。

[SERVICE] \Device\VhdHardDisk{2407c90d-3e84-4b1e-bbcd-06bd2282bd43}\Windows\System32\svchost.exe によって設定されたタイ マーは 13:58:25 (2024/06/06) で有効期限が切れます。
  理由: Windows は、スリープ状態の解除を要求したスケジュールされたタスク 'Maintenance Activator' を実行します。
okuokuokuoku

無効にしてみる

https://github.com/okuoku/my-docker-jenkins/commit/9f1784d1a89910b4d2e1dadbd3b2288db43b5f84

とりあえず、レジストリ2つを設定してみる。世間的には DisableMaintenance だけで済ませているようだが、手元では WakeUp も設定しないとwaketimerが設定されたままだった。

RUN reg add 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Maintenance' /v MaintenanceDisabled /t REG_DWORD /reg:64 /f /d 1
RUN reg add 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Maintenance' /v WakeUp /t REG_DWORD /reg:64 /f /d 0