Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Windowsコンテナを対話型セッションで起動しようとすると80070002エラーが発生する

PS C:\docker> docker run mcr.microsoft.com/windows/nanoserver:ltsc2022 -it cmd.exe
docker: Error response from daemon: container 23562ad343abb674269577807f3915b8e596bb557b9623f62a32b8920f685889 encountered an error during hcs::System::CreateProcess: -it cmd.exe: failure in a Windows system call: The system cannot find the file specified. (0x2)
[Event Detail:  Provider: 00000000-0000-0000-0000-000000000000]
[Event Detail:  Provider: 00000000-0000-0000-0000-000000000000]
[Event Detail: onecore\vm\compute\management\orchestration\vmhostedcontainer\processmanagement.cpp(173)\vmcomputeagent.exe!00007FF77763FECD: (caller: 00007FF7775E4C97) Exception(2) tid(3bc) 80070002 The system cannot find the file specified.
    CallContext:[\Bridge_ProcessMessage\VmHostedContainer_ExecuteProcess]
 Provider: 00000000-0000-0000-0000-000000000000].

これは単なる凡ミスで、コマンドラインオプション-itを指定する順序を誤っていただけだった。docker container ps -aすると、-itが実行すべきコマンドとしてコンテナに渡ってしまっていることが分かる。

PS C:\docker> docker container ps -a
CONTAINER ID   IMAGE                                           COMMAND         CREATED         STATUS    PORTS     NAMES
23562ad343ab   mcr.microsoft.com/windows/nanoserver:ltsc2022   "-it cmd.exe"   9 seconds ago   Created             distracted_moser

以下のように指定すれば問題なく対話型セッションでコンテナが起動し、コンテナ中のcmd.exeのプロンプトが表示される。

PS C:\docker> docker run -it mcr.microsoft.com/windows/nanoserver:ltsc2022 cmd.exe

参考: learn.microsoft.com