我是 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
请帮忙!
答案 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
总是一件好事,以确保您有一个正在运行的容器。