无法在容器中运行最简单的命令

时间:2021-04-13 07:32:36

标签: windows docker

我是 docker 新手,这应该是在 Windows 机器上运行 Windows 容器。 我刚刚开始,但我什至无法运行最简单的命令。这是我使用 nanoserver 运行 echo:

PS C:\git\hello> docker run mcr.microsoft.com/windows/nanoserver:1903 echo "hello"
docker: Error response from daemon: container c828528b48b30dfbbcd48522199c5938dd0363f63df1b328c1d92b0ea23acee8 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!00007FF6EFA3B3A7: (caller: 00007FF6EF9EE70B) Exception(2) tid(388) 80070002 The system cannot find the file specified.
    CallContext:[\Bridge_ProcessMessage\VmHostedContainer_ExecuteProcess]
 Provider: 00000000-0000-0000-0000-000000000000] extra info: {"CommandLine":"echo hello","User":"ContainerUser","WorkingDirectory":"C:\\","CreateStdInPipe":true,"CreateStdOutPipe":true,"CreateStdErrPipe":true,"ConsoleSize":[0,0]}.

例如,当我将命令切换到 ipconfig 时,它正在工作:

PS C:\git\hello> docker run mcr.microsoft.com/windows/nanoserver:1903 ipconfig

Windows IP Configuration


Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : xxx.xxx
   Link-local IPv6 Address . . . . . : xx::xx:xx:xx:xx%4
   IPv4 Address. . . . . . . . . . . : xx.xx.xx.xxx
   Subnet Mask . . . . . . . . . . . : xx.xx.xx.xx
   Default Gateway . . . . . . . . . : xx.xx.xx.xx

请帮忙!

1 个答案:

答案 0 :(得分:0)

在这个 thread 中,我发现图像 mcr.microsoft.com/windows/nanoserver 没有包含 powershell。

如果您需要执行命令,我建议改为运行 mcr.microsoft.com/powershell

docker run mcr.microsoft.com/powershell 命令之后(注意这里我没有在最后添加任何命令),

docker ps 以获取由 docker run 命令启动的容器 ID。

然后只需执行 docker exec 命令

docker exec -it <container_id> powershell.exe

此处的 -it 标志基本上将您正在运行的容器的标准输入 stdin 和标准输出 stdout 绑定到您的 shell。 通过这种方式,您将能够与您的容器进行交互,并且应该能够在那里执行任何 powershell 命令(将在您的容器内执行)

更好的方法可能是先用名称标记您的图像:

docker run --name myserver mcr.microsoft.com/powershell

然后直接执行

docker exec -it myserver powershell.exe

但是在执行命令之前执行 docker ps 总是一件好事,以确保您有一个正在运行的容器。