执行docker run mcr.microsoft.com/windows/servercore:1809 echo hello报错原因排查
Windows Server Core容器执行echo命令报错的问题分析与解决
问题场景
执行命令:
docker run mcr.microsoft.com/windows/servercore:1809 echo hello
出现以下错误:
docker: Error response from daemon: container b4e3e78ec07637c061407e28a24065d723ae20e1ef325c7c71fd3e40e06cdf58 encountered an error during hcsshim::System::CreateProcess: 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!00007FF644139FAB: (caller: 00007FF6440EE19A) Exception(2) tid(394) 80070002 The system cannot find the file specified. CallContext:[\Bridge_ProcessMessage\VmHostedContainer_ExecuteProcess] Provider: 00000000-0000-0000-0000-000000000000].
添加cmd后命令变为docker run mcr.microsoft.com/windows/servercore:1809 cmd echo hello,不再报错,但仅显示C:\,看不到hello输出。
问题原因
- 错误0x2的原因:Windows系统中
echo是cmd.exe的内置命令,并非独立的可执行文件(不存在echo.exe)。Docker执行命令时会默认寻找可执行文件,找不到就抛出“系统找不到指定文件”的错误。 - 添加
cmd后无输出的原因:直接用cmd启动容器时,默认进入交互模式,不会执行后续的echo hello就停在命令提示符C:\,所以看不到输出结果。
解决方法
需要给cmd加上/c参数,让它执行指定命令后立即退出,同时返回命令输出。正确的命令如下:
docker run mcr.microsoft.com/windows/servercore:1809 cmd /c echo hello
执行该命令后,容器会正常输出hello并退出。
内容的提问来源于stack exchange,提问作者Ricardo
相关产品推荐
相关产品推荐

