0

我是 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

请帮忙!

4

1 回答 1

0

在这个线程中,我发现图像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在执行命令之前总是做一件好事,以确保你有一个正在运行的容器。

于 2021-04-13T07:49:02.270 回答